gpt4 book ai didi

jpa - 了解 FetchType.Lazy,强制 JPQL 查询 (OpenJPA)

转载 作者:行者123 更新时间:2023-12-02 07:05:27 26 4
gpt4 key购买 nike

我有一个这样的实体:

public class Configuration {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
@Element(name = "user_id", data = true, required = false)
private Users users;
}

我想定义一个查询,其中一次执行 LazyLoading,另一次不执行。

但是查询:

@NamedQuery(name = "getNondeletedConfiguration", query = "SELECT c FROM Configuration c  "
+ "LEFT JOIN c.users users WHERE c.deleted = false"),

不将用户加载到对象中。

强制加载用户对象的方法是访问代码中某处的属性。但是这不起作用,我不想要这种行为。我想仅根据我的 JPQL 语句来控制延迟加载。我不希望 openJPA 神奇地加载对象,因为它通过 Java 代码中某处的 get 方法检测到访问。

我想这是一个常见问题,我只是误解了一些东西。但是,我找不到有关该问题的文档。

最佳答案

加载关联需要添加fetch关键字:

select c from Configuration c left join fetch c.users where c.deleted = false

请注意,代表一个用户的实体的名称 Users 的选择确实很糟糕,而且非常困惑。与字段名称 users 相同。您应该删除最后的 s,这会让每个读者都认为一个配置有很多用户。

关于jpa - 了解 FetchType.Lazy,强制 JPQL 查询 (OpenJPA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12651655/

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