Force急切加载Hibernate中的所有依赖项

时间:2014-10-30 07:15:31

标签: java entity-framework hibernate lazy-loading eager-loading

我们的大多数实体都有延迟加载,因为它们不是必需的。 在一个特定的场景中,函数需要它们急切加载,这超出了Transaction Scope。

这是实施的一点

@Transaction
public E getFullyLoadedDetachedEntity(Long id) {
    E entity = dao.findById(id);
    Hibernate.initialize(entity);
    dao.detach(entity);
    return entity;
}

但问题是,Entity(E) might have associated entities 'X' which might have 'Y' as lazy loaded.

class E{
   X x; //Lazy Load
}
class X{
   Y y; //Lazy load
}

现在,Hibernate.initialize(entity) may be loading only it's associated entities(X) but not the associated entites(Y) of X.

如何在任何级别强制加载所有依赖项/延迟加载的对象。

更新 我试过这个,但是

E entity = dao.findById(id);
Hibernate.initialize(entity);
for (X x : entity.getXList()) {
    Hibernate.initialize(x);
}
dao.detach(entity);

我在访问X.getY()

时仍然遇到LazyException

1 个答案:

答案 0 :(得分:0)

只需在更新的代码中再添加一行。

E entity = dao.findById(id);
Hibernate.initialize(entity);
for (X x : entity.getXList()) {
    Hibernate.initialize(x);
    Hibernate.initialize(x.getY());
}
dao.detach(entity);

希望这可以帮助你:)