hibernate hql会自动加上一些东西
Hibernate:selectuser0_.IdasId0_,user0_.USER_IDasUSER2_0_,user0_.USER_PASSWORDasUSER3_...
Hibernate: select user0_.Id as Id0_, user0_.USER_ID as USER2_0_, user0_.USER_PASSWORD as USER3_0_, user0_.USER_MOBNUM as USER4_0_, user0_.USER_EMAIL as USER5_0_ from user user0_ where user0_.USER_ID=? and user0_.USER_PASSWORD=?
org.hibernate.exception.SQLGrammarException: could not execute query
请问为什么hibernate会自动加上一些奇怪的东西进去? 展开
org.hibernate.exception.SQLGrammarException: could not execute query
请问为什么hibernate会自动加上一些奇怪的东西进去? 展开
2个回答
展开全部
奇怪的东西的添加是因为hibernate是一个orm框架,在o即object和r即relationship之间的映射的时候,会进行转化。于是你在程序中提供的hql会转化为sql,这是个hibernate自动的过程,于是就会出现了你说的那些奇怪的东西。
Hibernate:
select user0_.Id as Id0_,
user0_.USER_ID as USER2_0_,
user0_.USER_PASSWORD as USER3_0_,
user0_.USER_MOBNUM as USER4_0_,
user0_.USER_EMAIL as USER5_0_
from user user0_
where user0_.USER_ID=? and user0_.USER_PASSWORD=?
上述进行了格式化,你也可以在hibernate的配置文件中通过hibernate.show_sql和hibernate.format_sql两个属性来控制sql的打印输出。比较你所谓的奇怪的东西和hql简洁的本身,无非就是出来个select语句然后是一对列的别名。你要仔细看,无非就是你的一句from User的hql导致了select *的sql,而这个*在hibernate的sql中只不过把每一列都列出来了。
————————————————————————————————
再说你的异常。问题是“不能执行查询”出错位置是list()哪一行。什么原因?从你提供的代码和日志来看是看不到的。你需要把打印的日志往下拉一拉,一般有一句caused by,那后面会描述原因。一般原因就是User.hbm.xml或hibernate.cfg.xml(里面注册hbm.xml)的问题。
Hibernate:
select user0_.Id as Id0_,
user0_.USER_ID as USER2_0_,
user0_.USER_PASSWORD as USER3_0_,
user0_.USER_MOBNUM as USER4_0_,
user0_.USER_EMAIL as USER5_0_
from user user0_
where user0_.USER_ID=? and user0_.USER_PASSWORD=?
上述进行了格式化,你也可以在hibernate的配置文件中通过hibernate.show_sql和hibernate.format_sql两个属性来控制sql的打印输出。比较你所谓的奇怪的东西和hql简洁的本身,无非就是出来个select语句然后是一对列的别名。你要仔细看,无非就是你的一句from User的hql导致了select *的sql,而这个*在hibernate的sql中只不过把每一列都列出来了。
————————————————————————————————
再说你的异常。问题是“不能执行查询”出错位置是list()哪一行。什么原因?从你提供的代码和日志来看是看不到的。你需要把打印的日志往下拉一拉,一般有一句caused by,那后面会描述原因。一般原因就是User.hbm.xml或hibernate.cfg.xml(里面注册hbm.xml)的问题。
更多追问追答
追答
估计是与mysql关键字用重复了。你看你给我截图的倒数第二行的那个user光秃秃的那个user对就是他。mysql里面user肯定是关键字啊,直接转为了sql后是from user怎么能成功,关键字user冲突很严重啊。
解决方法:
1、修改类名User为其它(不推荐);
2、或者(你用这个)修改User.htm.xml的映射文件的User的table表名为t_user之类的,你之前肯定是个光秃秃的user。
————————————————
其它的,这种问题,sql syntax一般就是那个字符出的错,甚至说一个单引号么得。认真看看。再者你的cfg.xml文件没什么问题,写的很好。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询