我有一个类,它有一个自动获取的集合,但以一种懒惰的方式,因为它并不总是需要的。我有一个依赖于那个集合的方法,但是我希望它不触发延迟加载,如果它还没有触发的话。有没有一种方法可以在不触发加载的情况下判断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(),但这会触发加载...
发布于 2014-12-17 01:31:47
如果您可以访问Hibernate API (而不是纯JPA),则可以使用方法Hibernate.isInitialized(java.lang.Object)
从Javadoc中,它返回
如果参数已初始化或不是代理或集合,则为true
发布于 2014-12-17 01:34:38
如果您使用JPA2,则可以使用PersistenceUnitUtil完成此操作,如下所示
PersistenceUnitUtil unitUtil = em.getEntityManagerFactory().getPersistenceUnitUtil();
Assert.assertTrue(unitUtil.isLoaded(myclassInstance));
Assert.assertFalse(unitUtil.isLoaded(myclassInstance, "toyBox"));https://stackoverflow.com/questions/27510331
复制相似问题