【发布时间】:2014-10-30 07:15:30
【问题描述】:
我们的大多数实体都具有延迟加载,因为它们不是必需的。 在一种特定情况下,函数需要它们急切地加载,这超出了事务范围。
这是实现的一点点
@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
【问题讨论】:
-
Hibernate.initialize(entitity.getX());会为那个级别做这件事,但如果你沿着这条路走下去,用不了多久你就会将几乎整个数据库拉入内存
标签: java entity-framework hibernate lazy-loading eager-loading