首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查是否加载了Hibernate PersistentBag?

检查是否加载了Hibernate PersistentBag?
EN

Stack Overflow用户
提问于 2014-12-17 01:21:35
回答 2查看 3K关注 0票数 2

我有一个类,它有一个自动获取的集合,但以一种懒惰的方式,因为它并不总是需要的。我有一个依赖于那个集合的方法,但是我希望它不触发延迟加载,如果它还没有触发的话。有没有一种方法可以在不触发加载的情况下判断PersistentBag是否尚未加载?

示例类:

代码语言:javascript
复制
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(),但这会触发加载...

EN

回答 2

Stack Overflow用户

发布于 2014-12-17 01:31:47

如果您可以访问Hibernate API (而不是纯JPA),则可以使用方法Hibernate.isInitialized(java.lang.Object)

从Javadoc中,它返回

如果参数已初始化或不是代理或集合,则为true

票数 2
EN

Stack Overflow用户

发布于 2014-12-17 01:34:38

如果您使用JPA2,则可以使用PersistenceUnitUtil完成此操作,如下所示

代码语言:javascript
复制
PersistenceUnitUtil unitUtil = em.getEntityManagerFactory().getPersistenceUnitUtil();

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

Assert.assertFalse(unitUtil.isLoaded(myclassInstance, "toyBox"));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27510331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档