我有一个自动获取集合的类,但是以懒惰的方式,因为并不总是需要它。我有一个方法依赖于该集合,但我希望它不会触发延迟加载,如果它还没有被解雇。有没有办法判断是否没有加载PersistentBag
而没有触发加载?
示例类:
class MyClass {
private List<MyThings> toybox;
@OneToMany (fetch = FetchType.LAZY, mappedBy = "toyBox")
public List<MyThings> getToybox () {
return toybox;
}
public void setToybox (List<MyThings> toybox) {
this.toybox = toybox;
}
@Transient
public List<String> toyNames() {
if (hasNotAlreadyLoaded(this.toybox) {
return null; // Can't run right now; data not available
}
return parseToybox(this.toybox);
}
}
那么,问题是boolean hasNotAlreadyLoaded(PersistantBag bag)
应该检查行李是否已被装载?检查我尝试的.size()
,但是会触发加载......
答案 0 :(得分:1)
如果您使用JPA2,可以使用PersistenceUnitUtil
完成,如下所示
PersistenceUnitUtil unitUtil = em.getEntityManagerFactory().getPersistenceUnitUtil();
Assert.assertTrue(unitUtil.isLoaded(myclassInstance));
Assert.assertFalse(unitUtil.isLoaded(myclassInstance, "toyBox"));
答案 1 :(得分:0)
如果您可以访问Hibernate API(非纯JPA),则可以使用方法Hibernate.isInitialized(java.lang.Object)
从Javadoc中,它返回
如果参数已初始化,或者不是代理或集合
,则为true