11

我需要一个助手来了解是否已加载属性作为避免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());
4

2 回答 2

16

其实有两种方法。

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

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

于 2009-10-19T16:05:20.873 回答
1

根据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");
于 2019-11-12T20:31:35.133 回答