Java Spring、Hibernate、JPA:延迟加载id
我目前正在将一个大型项目从Grails转换为Spring:当我尝试延迟加载对象id而不必选择整个表时,我有点卡住了 我希望它的工作方式,/Object/: 因此,如果需要,我可以从另一个控制器访问该内部对象,使用我在所有控制器上实现的常规CRUD方法/儿童/1 考虑到JSON输出,我在序列化过程中遇到了会话不可用的问题,这是可以理解的,我见过在服务层中调用object.child.getId之类的方法,对我来说,这似乎是令人难以置信的黑客行为,而且还会导致整个对象被延迟加载 总的来说,我希望创建一个简单的Rest应用程序,可以轻松定制json输出,grails在json编组插件中做得非常好: 编辑: 我真的不想设置快速加载,但是快速加载是可能的。有没有办法获得最大深度的快速装载Java Spring、Hibernate、JPA:延迟加载id,java,json,spring,hibernate,jpa,Java,Json,Spring,Hibernate,Jpa,我目前正在将一个大型项目从Grails转换为Spring:当我尝试延迟加载对象id而不必选择整个表时,我有点卡住了 我希望它的工作方式,/Object/: 因此,如果需要,我可以从另一个控制器访问该内部对象,使用我在所有控制器上实现的常规CRUD方法/儿童/1 考虑到JSON输出,我在序列化过程中遇到了会话不可用的问题,这是可以理解的,我见过在服务层中调用object.child.getId之类的方法,对我来说,这似乎是令人难以置信的黑客行为,而且还会导致整个对象被延迟加载 总的来说,我希望创建
{
children: { //depth 1
children-children: { //depth 2 (Ignore this)
}
}
}
您可以使用这基本上是object.child.getId hack的包装:
Hibernate.initialize(object.getChildren());
或者为此创建一个特殊查询,这将是最大深度为1的急切加载:
#assuming you use hql, it would look like this
SELECT e FROM Entity e
JOIN FETCH e.children...
也可以使用CriteriaAPI和DetachedCriteria。您可以使用,以便在访问时使用单个辅助查询获取所有未初始化的实体
您只需确保,当访问未初始化的惰性关联时,Hibernate会话仍处于打开状态
Hibernate.initialize(object.getChildren());
#assuming you use hql, it would look like this
SELECT e FROM Entity e
JOIN FETCH e.children...