Hibernate的hql引发的报错,虽然标题以这样开头,但是根本原因不在hql,尽管跟hql也有那么一丢丢关系。
故事是这样的。
今天刚开始比较系统的自学hibernate框架时候,突然报了个错。使我一脸蒙蔽。
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘2019.stuinfo stuinfo0_’ at line 1
错误:您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以获得在“2019.stuinfo stuifo0”附近第1行使用的正确语法。
这是个啥?怎么会出这么个错呢?先百度翻译了一波,啥规则什么什么的。然后百度了一波,不给力啊。我这可是写了个最最最简单的hql。
我寻思着,这不得是全天下最简单的hql了?这怎么还能报错呢。还能真的是标点符号用成中文了?我盯了半天。好吧,没毛病。然后我尝试写了个sql,结果很OK。看来就是hql的问题。虽然之前没学hibernate,但平时也没少用hql,用的也算是没问题。这怎么跑到这里好好学的时候还能出这种问题呢。
然后控制台输出了一下sql。
hibernate打印的hql解析是Hibernate: select stuinfo0_.id as id1_0_, stuinfo0_.name as name2_0_, stuinfo0_.sex as sex3_0_, stuinfo0_.age as age4_0_ from 2019.stuinfo stuinfo0_
数据库名是2019,数据表名是stuinfo。
然后我将sql弄到navicat中查了一下。真的有问题。然后我将数据库名删了,select stuinfo0_.id as id1_0_, stuinfo0_.name as name2_0_, stuinfo0_.sex as sex3_0_, stuinfo0_.age as age4_0_ fromstuinfo stuinfo0_ 这样进行查询了一下,是没有问题的。
后来研究了一下,发现是
数据库名字是纯数字引发的这个报错
。
好吧,真的是碰巧了。尬的一批。
数据库和表名可以用数字,但纯数字活数字开头的要加个[]。
例如:select * from [1xxx]。
程序将hql转成sql是数据库名.table名的格式,数字的话,我这边的mysql就识别不了这种语句了。
将数据库的名字改成英文就解决了这个问题了。