gpt4 book ai didi

java - 为什么 Hibernate ALTER 是我的 QUERY ?带有 IN 运算符的多列

转载 作者:行者123 更新时间:2023-12-02 18:13:53 25 4
gpt4 key购买 nike

如果我调试,我可以看到我正在构建的字符串是

and ( property1 , property2 ) in ( values (0, 5) , (3, 4) )

但是Hibernate认为这样改造比较好

and (
(
tabAlias.COLUMN1 , tabAlias.COLUMN2
) in (

values
(0, 5) ,
)
)

我不介意添加额外的 ( ) Hibernate,但我不明白为什么在 (0, 5) 后, 它没有出现>(3, 4) ??为什么 Hibernate 试图变得聪明却把事情搞砸了?

ps:我使用的是 DB2 9
ps2:不要告诉我使用条件查询,因为我正在修复别人的代码,我不想全部重写。ps3:我知道这不便携,但我不在乎。

有什么解决方法吗?我也不想使用多个 OR 子句来模拟这一点。

最佳答案

HQL 不是 SQL。 Hibernate 解析 HQL 并基于它构建新的 SQL 查询。我怀疑 HQL 不支持您尝试执行的操作。通常您会收到错误,但由于某种原因它接受您的 HQL 并生成无效的 SQL。

如果你想使用 SQL,你可以通过 Session.connection() 获得连接。

您可以通过稍微修改一下语法来使其正常工作。这可能会有所帮助: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/queryhql.html#queryhql-tuple

[编辑]

看起来这个人遇到了同样的问题,并改用 createSQLQuery() 来解决它。这一定是 hibernate 中的一个错误。

https://forum.hibernate.org/viewtopic.php?f=1&t=982785&view=previous

[编辑]

您的查询不应该是:

and ( property1 , property2 ) in ( values ((0, 5) , (3, 4)) )

注意额外的括号。

关于java - 为什么 Hibernate ALTER 是我的 QUERY ?带有 IN 运算符的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7195759/

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