gpt4 book ai didi

java - 为什么 Hibernate 会为此 HQL 抛出 QuerySyntaxException?

转载 作者:行者123 更新时间:2023-11-30 08:07:32 25 4
gpt4 key购买 nike

在使用 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 会关心有两个连续的命名参数。

这不是一个大问题,因为它很容易解决(只需将 ascdesc 字符串值附加到 HQL 而不是使用命名参数为它),但我很好奇为什么 Hibernate 会阻止它(可能仅仅是因为 99% 的时间顺序命名参数像这样会导致无效的 SQL/HQL)。

最佳答案

我一直在我的本地测试这个,但我无法得到你想要的结果来使用 HQL。

这是我链接的帖子的引述:

You can't bind a column name as a parameter. Only a column value. This name has to be known when the execution plan is computed, before binding parameter values and executing the query. If you really want to have such a dynamic query, use the Criteria API, or some other way of dynamically creating a query.

Criteria API 看起来是对您的目的更有用的工具。

这是一个例子:

    Criteria criteria = session.createCriteria(MyEntity.class);

if (orderDirection.equals("desc")) {
criteria.addOrder(Order.desc(orderProperty));
}
else {
criteria.addOrder(Order.asc(orderProperty));
}

关于java - 为什么 Hibernate 会为此 HQL 抛出 QuerySyntaxException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33635474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com