gpt4 book ai didi

java - 使用条件生成器忽略 JPA Hibernate 生成的左连接

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

我有一个实体(Person)与另一个实体(Availability)和其他实体具有@ManyToOne关系。当我获取人员时,我没有可用性为空的人员,因为 Hibernate 会进行内部联接(如果我有急切的获取),或者如果延迟获取则选择选择。同时,我尝试从结果创建另一个 bean,因此我使用:

query.select(builder.construct(MyPerson.class,root.get("availability").get("date").....)
This will generate
select a.date, ... from Person p, Availability a Where p.availId = a.id.
As I need a Left join, I have added to my code :
Join<Availability, person> avail = root.join("availability", JoinType.LEFT);

奇怪,它会生成一个LEFT OUTER join,但仍然使用旧的请求

 select **a2**.date, ... 
from Person p,
LEFT OUTER JOIN Availability a1 on a1.id = p.availId
,**Availability a2**
**Where p.availId = a2.id.**

这有什么问题吗?它仅生成左连接的唯一情况是当我用根构造新 bean 时。 (使用延迟加载),但它会生成太多其他查询。

 query.select(builder.construct(MyPerson.class,root)

最佳答案

最后,我找到了解决方案。事实上,我不需要使用 加入有效 = root.join("可用性", JoinType.LEFT);

所以我已经删除了它,并在创建我的新 bean 时执行以下操作: 查询.选择(构建器.构造(MyPerson.class, root.join("可用性", JoinType.LEFT).get("日期"))

现在我只有一个使用 LEFT OUTER JOIN 生成的查询。

关于java - 使用条件生成器忽略 JPA Hibernate 生成的左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22523684/

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