获取持久性上下文中的托管实体实例列表

Bor*_* B. 4 hibernate jpa hibernate-4.x

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

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

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

Ste*_*ole 9

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();
Run Code Online (Sandbox Code Playgroud)

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

  • Status.DELETED表示关于Session/EntityManager删除实体.Status.GONE表示该行已从数据库中删除. (2认同)