gpt4 book ai didi

java - JPA 2 标准 API : How to select values from various joined tables without using Metamodel?

转载 作者:太空宇宙 更新时间:2023-11-04 07:58:20 25 4
gpt4 key购买 nike

我有以下类型的查询,希望将其转换为 jpa 标准查询和以下表结构:

Table A 1-->1 Table B  1<--* Table C (proceedings) *-->1 Table D(prcoeedingsstatus)
-------- -------- ------- -------
aID bID cID dID
... .... timestamp textValue
f_bID .... f_bID
f_dID

1个A有1个B,1个B有多个诉讼,每个诉讼都有一个诉讼状态。

SELECT a.*

FROM ((a LEFT JOIN b ON a.f_b = b.id)
LEFT JOIN proceedings ON b.id = proceedings.f_b)
RIGHT JOIN proceedingsstatus ON proceedings.f_d = proceedingsstatus.id

WHERE d.textValue IN ("some unique text")
AND c.timestamp BETWEEN 'somedate' AND 'anotherdate'

当我现在尝试对谓词执行类似的操作时:

Predicate conditions = (root.join("tableB")
.joinList("proceedings")
.join("proceedingsstatus").get("textValue"))
.in(constraintList.getSelectedValues());

Predicate time = cb.between((root.join("tableB")
.joinList("proceedings")
.<Date>get("timestamp")), dt1.toDate(), dt2.toDate());

constraints = cb.and(conditions, time);

现在,如果在任何 A 的过程中“时间戳”与我构建的时间谓词相匹配,则根据条件谓词,它会选择条目 A,其中至少出现 1 次正确的过程状态。因此,当 C.timestamp 对于 D 中的文本值错误的处理正确时,如果至少有一个条目 C 属于 A,且 D 中的文本值正确,它也会选择条目 A。

如何更改它,以便它仅选择 A,其中程序状态具有正确的值并且 yield 时间正确?

最佳答案

重用连接,而不是为每个谓词创建新的连接。

Join proceedings = root.join("tableB").joinList("proceedings");

关于java - JPA 2 标准 API : How to select values from various joined tables without using Metamodel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13270857/

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