检查是否加载了Hibernate PersistentBag?

时间:2014-12-16 17:21:35

标签: java hibernate

我有一个自动获取集合的类,但是以懒惰的方式,因为并不总是需要它。我有一个方法依赖于该集合,但我希望它不会触发延迟加载,如果它还没有被解雇。有没有办法判断是否没有加载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(),但是会触发加载......

2 个答案:

答案 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