背景:最近在升级hibernate的版本,由hibernate5.x升级至hibernate6.x,记录下在查询数据时遇到的问题。
1.执行如下代码:

2.报错现象:
org.hibernate.query.sqm.InterpretationException: Error interpreting query [from IntentModel a where id=1 order by a.create_time ]; this may indicate a semantic (user query) problem or a bug in the parser [from IntentModel a where id=1 order by a.create_time ]
3.问题分析:
(1)根据错误信息可以确定表【IntentModel】是真实存在的,查看表结构,确实存在id和create_time列,所以可以明确不是表结构的问题。
(2)回看代码,就是一个根据条件查询数据的SQL,查询条件有两个,拆开一个一个执行,发现问题问题出现order by a.create_time语句上。
(3)由(2)中的结论得知create_time也是存在的,所以怀疑是不是实体类上的@Column(name = "create_time")是不是没生效,但很快又被我推翻了,如果注解没生效,那么表结构中应该没有create_time列,陷入了沉思~~~~
(4)拆开查询条件执行时,发现id列作为查询条件时都可以执行成功,create_time列作为查询条件确抛异常,所以很明确就是create_time的问题,我又试了试其他的列作为查询条件是否能成功,惊喜马上就要出现了,发现SQL中的列名和实体类属性名称一模一样的就可以成功,反之不一样的就会抛异常,大胆怀疑就是SQL中写的列名和数据库中的列名映射出了问

文章讲述了作者在将Hibernate从5.x升级到6.x时,遇到查询时的错误,发现新版本中Hibernate倾向于使用实体类属性名称作为SQL列名,导致与旧版不同,解决方法是调整SQL语句的列名与实体类属性一致。
1074

被折叠的 条评论
为什么被折叠?



