有没有帮助知道Hibernate是否已经加载了一个属性?

时间:2009-10-19 14:53:05

标签: java hibernate lazy-loading helper

我需要一个帮助程序来了解是否已加载属性以避免LazyInitializationException。有可能吗?

@Entity
public class Parent {
    @OneToMany
    private List<Child> childList;
}

@Entity
public class Child {

}

"select distinct p from Parent p left join fetch p.childList";

// Answer goes here
// I want to avoid LazyInitializationException
SomeHelper.isLoaded(p.getChildList());

2 个答案:

答案 0 :(得分:13)

实际上有两种方法。

要确定是否已初始化惰性属性,您可以使用实体实例和属性名称作为参数调用Hibernate.isPropertyInitialized()方法。

要确定是否已初始化惰性集合(或实体)(如您的示例中所示),您可以使用集合(实体)实例作为参数调用Hibernate.isInitialized()

答案 1 :(得分:0)

根据documentation for Hibernate 5.4

休眠API

boolean personInitialized = Hibernate.isInitialized(person);

boolean personBooksInitialized = Hibernate.isInitialized(person.getBooks());

boolean personNameInitialized = Hibernate.isPropertyInitialized(person, "name");

JPA

  

在JPA中,有另一种方法可以使用   遵循javax.persistence.PersistenceUtil模式(即   尽可能推荐)。

PersistenceUtil persistenceUnitUtil = Persistence.getPersistenceUtil();

boolean personInitialized = persistenceUnitUtil.isLoaded(person);

boolean personBooksInitialized = persistenceUnitUtil.isLoaded(person.getBooks());

boolean personNameInitialized = persistenceUnitUtil.isLoaded(person, "name");
相关问题