【发布时间】:2015-11-10 17:01:21
【问题描述】:
在使用 Hibernate 构建查询时,我注意到一些很奇怪的事情。如果我对ORDER BY 子句使用顺序命名参数,Hibernate 会抛出一个QuerySyntaxException(冒号前缀是一个意外的标记):
createQuery("FROM MyEntity ORDER BY :orderProperty :orderDirection");
但是,如果使用纯 SQL 查询完成此操作,则创建查询时不会出现问题:
createSQLQuery("SELECT * FROM my_entity_table ORDER BY :orderProperty :orderDirection");
我知道 Hibernate 正在对 HQL 查询进行更多的字符串评估,这可能是 SQL 查询创建时没有错误的原因。我只是想知道为什么 Hibernate 会关心有两个连续的命名参数。
这不是一个大问题,因为它很容易解决(只需将 asc 或 desc 字符串值附加到 HQL,而不是为其使用命名参数),但我很好奇为什么Hibernate 正在阻止它(可能仅仅是因为 99% 的时间顺序命名参数像这样导致无效的 SQL/HQL)。
【问题讨论】: