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会自动加上一些奇怪的东西进去?
展开
 我来答
an0011121
2015-01-05 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3948
采纳率:55%
帮助的人:2390万
展开全部
奇怪的东西的添加是因为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 cfg 在补充问题那里,你说的很清楚,我大概了解到了。但是还是不懂为什么这个语句执行不了,hibernate配置能帮我看看是否出问题啊。

追答
估计是与mysql关键字用重复了。你看你给我截图的倒数第二行的那个user光秃秃的那个user对就是他。mysql里面user肯定是关键字啊,直接转为了sql后是from user怎么能成功,关键字user冲突很严重啊。
解决方法:
1、修改类名User为其它(不推荐);
2、或者(你用这个)修改User.htm.xml的映射文件的User的table表名为t_user之类的,你之前肯定是个光秃秃的user。
————————————————
其它的,这种问题,sql syntax一般就是那个字符出的错,甚至说一个单引号么得。认真看看。再者你的cfg.xml文件没什么问题,写的很好。
wrp920227
2015-01-05 · TA获得超过129个赞
知道小有建树答主
回答量:194
采纳率:0%
帮助的人:116万
展开全部
这个只是对表取的一个别名user user0_。
更多追问追答
追问
那为什么这个语句执行不了? 可以控制不取别名吗?
追答
你是直接在你的本地数据库执行一下试试。可能是映射文件配置出错了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式