Sof*_*ant 4 eager loading lazy-evaluation jpa-2.0
我试图让一些JPA的东西工作.我有一个表有另一个表的外键.当我生成JPA实体时,我会对这些变量进行一对多的编辑...还需要做什么才能将所有表格放回到结果集中?如果我确实称呼它.这是我想要做的一个例子.
@OneToMany(mappedBy="resourceId")
private List<DistributionLink> distributionLinkCollection;
Run Code Online (Sandbox Code Playgroud)
@OneToMany注释很漂亮......
我想要恢复所有值我需要调用调用此表的命名查询吗?
qLaunchArr = (QuickLaunch[])emf.createNamedQuery("QuickLaunch.getQuickLaunch").getResultList().toArray();
Run Code Online (Sandbox Code Playgroud)
我是否会想到我还将获得包含所有结果集的DistributionLinks数组?现在我知道这与Eager Loading vs Lazy加载有关.究竟是什么,我不确定.我知道延迟加载只加载显式调用的@oneToMany属性(我认为)?我怎样才能收回我需要的所有收藏品.我是否需要遍历结果集并调用命名查询以使用命名查询获取所有结果集?
谢谢.
当您选择延迟加载某些内容时,取决于您是否仍处于事务上下文中,当您使用getter获取子集合时,JPA应自动为您获取它.因此,如果数据离开具有获取父对象的实体管理器的会话bean,您将无法自动实例化延迟加载的集合.
如果您选择使用EAGER获取策略,则该集合的每个实例都将被预先实例化,并且可以在任何地方使用.
一个很好的折衷方案,可以让你避免约束你的设计决定(但仍然允许你利用延迟加载来避免在每次获取这些记录时加载你不需要的东西)到只处理bean中的这些集合来获取当您事先知道您将需要该集合时,父实体将会在您的查询中坚持:
JOIN FETCH distributionLinks
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8849 次 |
| 最近记录: |