jpa - 如何从 JPA 获取分离对象

标签 jpa jpa-2.0 eclipselink

在我的应用程序中,我需要以分离模式获取大多数对象(使用 find API 获取)。
我想知道是否有一种方法可以向 JPA 提供者请求分离的对象并保存对 detach() API 的额外调用。
另外,我希望在这种模式下创建的对象更便宜,因为 JPA 提供程序不需要将其添加到实体管理器上下文中。
有没有办法使用 JPA API 来实现这一点?
有没有办法通过查询结果来实现这样的功能?

  • 具体来说,我正在使用 Eclipse Link,因此如果有特定的方法来实现此实现,它也会很有帮助。

最佳答案

您可以获取分离的实体,而无需额外调用 detach()如果您在事务之外获取它。如果您不使用容器管理的事务,这很简单,只需不要启动事务即可。

如果您使用 CMT,则必须确保请求对象不是支持事务的 EJB:

  • 如果在 EJB 中,则通过使用以下注释适当的方法来暂停事务: @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) ,

  • 调用 EntityManager来自 POJO。您不必直接调用它,唯一重要的是查询结果将以非 EJB 对象结尾。

据我所知,没有预期的性能提升,因为查询结果将始终放入当前的持久性上下文中,无论它的生命周期有多短。

编辑:还有另一种可能性来获取不依赖于事务划分的分离对象:JPA 构造函数表达式:

List<DTO> dtos = em.createQuery("SELECT NEW com.example.DTO( o.title, o.version) FROM Entity o").getResultList();

构造类型必须有一个带有所有相关属性的构造函数。列表中的对象,无论是否为实体,都将始终以分离的方式创建。然而,实例化新对象会产生少量开销。

关于jpa - 如何从 JPA 获取分离对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14874996/

相关文章:

java - JPA查询需要一些指导

java - 如何结合 hibernate 映射的注释?

validation - 在选择期间绕过 Bean 验证但不在插入/更新期间

hibernate - JPA Criteria API where subclass - 出现错误 : Unable to resolve attribute [lastName] against path [null]

java - JPA 2.0 提供程序 hibernate

java - 每个 DAO 中的 EntityManager 配置

jpa - 在 eclipselink 中设置隔离级别

hibernate - Hibernate session 工厂找不到 DAO 注释中定义的 NamedQuery

java - Hibernate:内部类值未在数据库中更新

jpa-2.0 - 使用嵌入式 glassfish v3 进行 JPA + EJB 测试