我们的大多数实体都有延迟加载,因为它们不是必需的。 在一个特定的场景中,函数需要它们急切加载,这超出了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答案 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);
希望这可以帮助你:)