根据与持久化上下文的联系不同,Hibernate应用中的Entity对象可能处于不同的状态,那么持久化上下文如何检测Entity对象的状态呢?持久化上下文提供了专门的方法检测给定的Entity对象的状态。
1. 检测Entity对象是否处于managed/persistent状态
对于Hibernate的Native API,示例如下:
boolean contained = session.contains( person );
对于Hibernate的JPA API,示例如下:
boolean contained = entityManager.contains( person );
2. 检测延迟加载的Entity对象是否被加载
对于Hibernate的Native API,示例如下:
boolean personInitialized = Hibernate.isInitialized( person );
boolean personBooksInitialized = Hibernate.isInitialized( person.getBooks() );
boolean personNameInitialized = Hibernate.isPropertyInitialized( person, "name" );
对于Hibernate的JPA API,示例如下:
PersistenceUtil persistenceUnitUtil = Persistence.getPersistenceUtil();//recommended
//PersistenceUnitUtil persistenceUnitUtil = entityManager.getEntityManagerFactory().getPersistenceUnitUtil();//not recommended
boolean personInitialized = persistenceUnitUtil.isLoaded( person );
boolean personBooksInitialized = persistenceUnitUtil.isLoaded( person.getBooks() );
boolean personNameInitialized = persistenceUnitUtil.isLoaded( person, "name" );