我有一个像这样的实体:
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代码中的某个位置检测到访问方法。
我想这是一个常见的问题,我只是误解了一些东西。 但是,我找不到关于这个问题的文档。
答案 0 :(得分:8)
您需要添加fetch
关键字来加载关联:
select c from Configuration c left join fetch c.users where c.deleted = false
请注意,代表一个用户的实体的名称Users
选择得非常糟糕,而且非常令人困惑。字段名称users
也是如此。您应该删除最终s
,这会让每个读者都认为配置有很多用户。