Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 强制在Hibernate中加载所有依赖项_Java_Entity Framework_Hibernate_Lazy Loading_Eager Loading - Fatal编程技术网

Java 强制在Hibernate中加载所有依赖项

Java 强制在Hibernate中加载所有依赖项,java,entity-framework,hibernate,lazy-loading,eager-loading,Java,Entity Framework,Hibernate,Lazy Loading,Eager Loading,我们的大多数实体都有延迟加载,因为它们不是必需的。 在一个特定的场景中,函数要求它们急切地加载,这超出了事务范围 下面是实现的要点 @Transaction public E getFullyLoadedDetachedEntity(Long id) { E entity = dao.findById(id); Hibernate.initialize(entity); dao.detach(entity); return entity; } 但问题是,实体(E

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

下面是实现的要点

@Transaction
public E getFullyLoadedDetachedEntity(Long id) {
    E entity = dao.findById(id);
    Hibernate.initialize(entity);
    dao.detach(entity);
    return entity;
}
但问题是,
实体(E)可能有关联的实体“X”,其中可能有“Y”作为延迟加载。

class E{
   X x; //Lazy Load
}
class X{
   Y y; //Lazy load
}
现在,
Hibernate.initialize(实体)可能只加载它的关联实体(X),而不加载X的关联实体(Y)。

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

更新 不过我试过这个

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

在访问X.getY()时,我仍然会遇到懒洋洋的异常情况。

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

E entity = dao.findById(id);
Hibernate.initialize(entity);
for (X x : entity.getXList()) {
    Hibernate.initialize(x);
    Hibernate.initialize(x.getY());
}
dao.detach(entity);
希望这对您有所帮助:)

Hibernate.initialize(entitity.getX())
将为该级别执行此操作,但如果您沿着该路径前进,不久您就会将几乎整个数据库拉入内存