Ale*_*nov 14 hibernate jpa openjpa eclipselink datanucleus
即使在创建实体管理器的实体管理器不再可用之后,EclipseLink也可以在实体中加载延迟关系.使用Hibernate 这不起作用,或者至少在该帖子时没有.
其他提供商怎么样?特别是OpenJPA和DataNucleus?
这有什么缺点(除了更复杂的实现)?
Tim*_*ote 12
尽管Hibernate确实需要相同的EntityManager才能延迟加载对象,但使用View Pattern中的Open Session可以轻松实现灵活的延迟加载.实质上,只要您需要,就可以保持EntityManager处于打开状态.我开发了客户端应用程序,只要应用程序处于打开状态,就可以保持相同的EntityManager处于打开状态.这将为您提供与本文中描述的基本相同的行为.然而,实施起来肯定比罗马描述的"开箱即用"的延迟加载更难实现.
所有这一切,延迟加载都有缺点.开发人员必须了解他的提取策略,并且必须能够区分每种策略最适用的时间和地点.否则,您可能会遇到严重的性能问题,例如N + 1选择问题.另外,在渲染视图期间,您可能会遇到数据库异常.
关于OpenJPA和DataNucleus:虽然我从未使用过,但这篇文章表明OpenJPA也需要OpenSessionInViewFilter延迟加载.这个SO答案和这个论坛帖子表明DataNucleus需要一个OpenPersistenceManagerInViewFilter延迟加载.
如果您没有EntityManager,则不了解数据存储区,EMF或其他任何内容.所以,如果你想要便携式,那么你不能再进行延迟加载(除了在你的对象中体现这些信息)...即,这不在JPA规范之内.
DataNucleus JPA可以很好地执行事务之外的字段的延迟加载.显然,您需要声明是否正在使用TRANSACTION或EXTENDED 持久性上下文运行,因为在前一种情况下,对象在事务提交时得到DETACHED(并且一旦分离就不能延迟加载),而在后者中,对象仍然存在管理(你可以在这种情况下懒惰).
| 归档时间: |
|
| 查看次数: |
7338 次 |
| 最近记录: |