我有一个 JPA 设置,如果我不使用延迟加载,几乎整个数据库都会被加载。我也直接在模型上使用序列化,所以有时我需要初始化代理。
我只想对集合使用延迟加载。急切地获取一些单一实体的事实很好。但无论我如何尝试设置集合,我从来没有得到代理集合,我总是得到完全加载的集合。
这是一些示例代码:
@Entity
public class Thread implements Externalizable {
@OneToMany(mappedBy = "parentThread", fetch = FetchType.LAZY)
public List<Reply> getReplies() {
return replies;
}
所以这里的问题是,当我检查调试器时,回复的persistantBag-list 总是充满信息,并且是实际的回复对象,而不是我想要的空代理。
当我想要线程时,我使用 entityManager.find(Thread.class, "ID") ,并且无论我是否有 fetch = FetchType.LAZY ,所有像这样的集合总是完全加载。
据我了解,设置 fetchtype lazy 应该可以按我的意愿工作。此外,我希望在使用 thread.getReplies() 时加载实体,以便我可以序列化并将它们发送到客户端。我不知道 getReplies 是否可以与代理实体一起使用,因为我从未得到任何要延迟加载的集合。
另一方面,我使用 Intellij 并用它来设置带有 Hibernate 的 JPA。我还问了一个类似的问题,我希望集合完全为空,但我不确定这是否可能,因此我提出了这个问题。
关于stackoverflow这个看似基本的问题,我还没有看到一个好的答案。如果问题确实以教学方式回答,请仅回复链接,因为我是 JPA/Hibernate 和数据库的新手。
非常感谢您!