【问题标题】:Get a list of managed Entity instances in a persistence context获取持久性上下文中托管实体实例的列表
【发布时间】:2014-01-03 00:24:19
【问题描述】:

有没有办法在 JPA/Hibernate 4.x 中获取给定 Session/EntityManager 的“已知”实体实例列表?

“已知”是指加载、创建或更改,即存在于持久性上下文中的托管实体。我知道EntityManager#contains 方法,所以我猜测这样的列表维护的,但我怎样才能得到它?

编辑: 另外,如何查询持久化实体的状态(检查它是否在这个持久化上下文中被创建、更新、删除或清理)?

【问题讨论】:

    标签: hibernate jpa hibernate-4.x


    【解决方案1】:

    JPA 没有定义这样的能力。但是您可以使用 Hibernate 调用来做到这一点:

    final org.hibernate.engine.spi.SessionImplementor session = em.unwrap( org.hibernate.engine.spi.SessionImplementor.class );
    final org.hibernate.engine.spi.PersistenceContext pc = session.getPersistenceContext();
    final Map.Entry<Object,org.hibernate.engine.spi.EntityEntry>[] entityEntries = pc.reentrantSafeEntityEntries();
    

    entityEntries 这里是一个 Map.Entry 实例数组,其“键”是实体本身,其值是 org.hibernate.engine.spi.EntityEntry 的一个实例,它描述了有关实体的各种信息,包括 EntityEntry.getStatus() 等信息。

    【讨论】:

    • 感谢您的回答。顺便说一句,您是否知道 Status.GONE 在休眠 (EntityEntry.getStatus()) 中的含义?
    • Status.DELETED 表示实体在 Session/EntityManager 方面已被删除。 Status.GONE 表示该行已从数据库中删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2010-09-07
    • 2013-11-07
    • 1970-01-01
    • 2014-05-13
    • 2015-07-30
    相关资源
    最近更新 更多