jpa-2.0 - 使用 JPA 加载懒惰 vs 急切加载

标签 jpa-2.0 loading lazy-evaluation eager

我正在尝试让一些 JPA 的东西起作用。我有一个表,它有另一个表的外键。当我生成 JPA 实体时,我会在这些变量上获得一对多的注释……我还需要做什么才能将所有表恢复到结果集中?如果我真的这样称呼它。这是我正在尝试做的一个例子。

@OneToMany(mappedBy="resourceId")
private List<DistributionLink> distributionLinkCollection;

@OneToMany 注释很漂亮......

我正在考虑取回所有值,我只需要调用调用此表的命名查询,对吗?
qLaunchArr = (QuickLaunch[])emf.createNamedQuery("QuickLaunch.getQuickLaunch").getResultList().toArray();

我是否认为我还将获得一组包含所有结果集的 DistributionLinks?
现在我知道这与 Eager Loading 与 Lazy loading 有关。究竟是什么,我不确定。我知道延迟加载只加载显式调用的 @oneToMany 属性(我认为)?我怎样才能取回我需要的所有收藏品。我是否需要遍历结果集并调用命名查询以使用命名查询获取所有结果集?

谢谢。

最佳答案

当您根据是否仍在事务上下文中选择延迟加载某些内容时,当您使用 getter 获取子集合时,JPA 应该自动为您获取它。因此,如果数据离开具有获取父对象的实体管理器的 session bean,您将无法自动实例化延迟加载的集合。

如果您选择使用 EAGER 获取策略,则该集合的每个实例都将被预先实例化,并且可以在任何地方使用。

一个很好的折衷方案,可以让您避免限制您的设计决策(但仍然允许您利用延迟加载来避免在每次获取这些记录时加载您不需要的内容)只在获取这些记录的 bean 中处理这些集合父实体会在您提前知道您需要该集合时,坚持您的查询:

JOIN FETCH distributionLinks

关于jpa-2.0 - 使用 JPA 加载懒惰 vs 急切加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10128356/

相关文章:

android - 在启动画面中插入加载环

scala - 按名称激活惰性变量

swift - 在做惰性变量、内存管理时我们需要弱引用还是无主引用

java - 使用生成的 Id 安全地持久保存新 JPA 实体的最佳实践

java - 如何使用 JPA 2.0 保留子类型列表?

c++ - 从PPM文件加载的QImage无法正确显示

c++ - 类方法子集的延迟评估

java - 在 CriteriaQuery 中使用 @ElementCollection(或查询 @ElementCollection 的内容)

eclipselink - 如何使用 jpa2 在内存中使用 derby?

javascript - 有些 JS 加载,有些则不加载