gpt4 book ai didi

mysql - 复杂的 JPQL ORDER 语句

转载 作者:行者123 更新时间:2023-11-30 23:39:09 27 4
gpt4 key购买 nike

我正在尝试编写一个相当复杂的 JPQL 语句,它根据另一个表中的值对结果进行排序。我知道 MySQL 会是什么样子,但我需要帮助将其转换为 JPQL。这是等效的 SQL:

SELECT o.* FROM Observation o
LEFT JOIN Obs_Event p
ON p.Event_ID = o.Event_ID
LEFT JOIN Event_Set ppp
ON ppp.Event_ID = o.Event_ID AND ppp.Event_Set_ID = o.Event_Set_ID
WHERE o.Individual_ID = <some id>
AND o.Observation_Date = <a date value>
ORDER BY ppp.Seq_Num ASC

任何有关如何执行此操作的帮助将不胜感激。具体来说,我似乎在这部分遇到了麻烦:

ON ppp.Event_ID = o.Event_ID AND ppp.Event_Set_ID = o.Event_Set_ID

到目前为止,我已经试过了:

        Query q=  em.createQuery("select o " +
" from Observation as o " +
" join o.eventID p" +
" join p.eventSetCollection ppp " +
" where o.individualID = :indiv " +
" AND o.observationDate = :d " +
" AND o.eventID = ppp.event " +
"";

如果我尝试添加类似

的内容
WHERE ...
AND o.eventSetID = ppp.eventSet

...它根本不起作用。如果我查看生成的 SQL,它看起来 ppp.eventSet 被简单地忽略了。

建议?

最佳答案

所以,首先感谢评论的发帖者,询问我的实体关系。这迫使我更仔细地审视事物并意识到问题所在。

事实证明,当我在 JPA 方面比现在还差的时候,我将 o.eventID 属性设置为一个实际的整数,就像在记录/对象的主键中一样,而不是实际的对象。因此,在上面的 JPQL 中,我实际上试图在以下语句中将对象映射到整数:

AND o.eventID = ppp.event

原来正确的说法是:

        Query q=  em.createQuery("select o " +
" from Observation as o " +
" join o.eventID p" +
" join p.eventSetCollection ppp " +
" where o.individualID = :indiv " +
" AND o.observationDate = :d " +
" AND o.eventID= ppp.event.eventID" +
" order by ppp.seqNum ASC" +
"");

虽然我最终应该在 Observation 类中更改这种关系以实际转到一个对象,但这在紧要关头有效。

关于mysql - 复杂的 JPQL ORDER 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4939889/

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