hibernate - JPA:哪些实现支持延迟加载外部事务?

标签 hibernate jpa eclipselink openjpa datanucleus

即使创建实体的实体管理器不再可用,EclipseLink 也可以加载实体中的惰性关系。使用 hibernate this doesn't work ,或者至少在发表该文章时还没有。

其他提供商怎么样?尤其是 OpenJPA 和 DataNucleus?

这样做有什么缺点(除了更复杂的实现之外)?

最佳答案

尽管 Hibernate 确实需要相同的 EntityManager 才能延迟加载对象,但使用 Open Session in View Pattern 可以轻松实现灵活的延迟加载。 。本质上,只要需要,您就可以使 EntityManager 保持打开状态。我开发了客户端应用程序,只要应用程序打开,该应用程序就保持相同的 EntityManager 打开。这将为您提供与本文中描述的基本相同的行为。然而,它肯定比罗马描述的“开箱即用”延迟加载更难实现。

话虽如此,there are downsides to lazy loading 。开发人员必须了解他的获取策略,并且必须能够区分每种策略最适用的时间和地点。否则,您可能会遇到严重的性能问题,例如 N+1 Select Problem 。另外,在 View 渲染期间您总是有可能遇到数据库异常。

关于 OpenJPA 和 DataNucleus:虽然我从未使用过,this post表示 OpenJPA 还需要一个 OpenSessionInViewFilter 来进行延迟加载。 This SO answerthis forum post表明 DataNucleus 需要一个 OpenPersistenceManagerInViewFilter 来延迟加载。

关于hibernate - JPA:哪些实现支持延迟加载外部事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10161165/

相关文章:

java - @ManyToMany 启动 LazyInitializationException

java - Hibernate:当在嵌入式集合中的对象中维护多对一关系的多方时如何设置按属性映射

java - JPA 执行查询但未插入数据

java - EclipseLink 如何检测首次访问以进行延迟抓取?

java - 从接口(interface)设置 Jersey 响应状态代码而不返回 Response

java - 如何使用 Hibernate 创建具有嵌套对象的对象?

java - @ManyToMany - 数据不会保存在数据库中

java - XmlDiscriminatorNode、XmlSchema 命名空间和 elementFormDefault=QUALIFIED

java - JPA-Hibernate-从 Select 语句生成的 ID 值

java - Maven, hibernate , Spring 问题