我有一个类,该类具有自动获取的集合,但是以一种懒惰的方式进行,因为并非总是需要它。我有一个依赖于该集合的方法,但我希望它不会触发延迟加载(如果尚未触发)。有没有一种方法可以在不触发PersistentBag的情况下确定是否未加载boolean hasNotAlreadyLoaded(PersistantBag bag)

示例类:

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);
  }
}


因此,问题是.size()应该如何检查袋子是否已装满?检查我尝试过的,但这会触发加载...

最佳答案

如果您使用JPA2,则可以使用PersistenceUnitUtil进行操作,如下所示

PersistenceUnitUtil unitUtil = em.getEntityManagerFactory().getPersistenceUnitUtil();

Assert.assertTrue(unitUtil.isLoaded(myclassInstance));

Assert.assertFalse(unitUtil.isLoaded(myclassInstance, "toyBox"));

09-04 23:52