【发布时间】:2014-09-05 13:53:25
【问题描述】:
我正在将一个 Struts2 Web 应用程序从 Hibernate V3 迁移到 Hibernate 4.3.5。
在 Hibernate V3 中,我们使用了如下 SQL 语句,并且它们运行良好:
select u.id as id,
u.userId as userId,
sum(u.totalSearchedFields) as total,
u.date as date,
u.status as status
from user u;
迁移到Hibernate V4.3.5后,上面的SQL语句报错:
org.hibernate.QueryException:
, expected in SELECT
我们通过从 SQL 语句中删除别名使其工作,如下所示:
select u.id,
u.userId,
sum(u.totalSearchedFields),
u.date,
u.status
from user u;
有人知道这是什么原因吗?如何在不删除别名的情况下解决此问题?
【问题讨论】:
-
我不知道为什么会发生这种情况,但 Hibernate V4 似乎比 Hibernate V3 更严格(例如 V3 默默接受
where x = null之类的东西,V4 会抛出异常)所以你可能会遇到同样的情况事物。恕我直言,选择中的别名无论如何都没有用,因为您无法在查询中解决它们,并且 Hibernate 在构建实体或结果列表时不会使用它们。 -
也许您使用的某个别名现在被视为保留字(例如
total或date)。尝试通过更改别名来运行第一个查询,例如在每个别名的末尾附加_FOO -
date和user是保留关键字。你不应该使用这些。还要检查其他别名和名称。 -
@AndreaLigios,感谢您编辑我的问题。现在似乎好多了。
-
它不是一个实际的 SQL 查询,我替换了实际 SQL 查询中的所有列。例如。我替换了 u.date 而不是 u.lastModifiedDate..
标签: java sql hibernate hibernate-mapping