我们使用OpenSessionInView模式的经典Spring应用程序。
有时我们希望在一个请求中处理多个(=未知大小)实体。 这是众所周知的OutOfMemory问题。
很久以前,我们创建函数(hack)来切换当前特定方法的hibernate会话。
public void proceedOnePerson(int id) {
recalculateVAT(id);
}
public void proceedAllPerson(int[] ids) {
for(int id : ids) {
switchToAnotherHibernateSesion();
recalculateVAT(id); //OutOfMemory
closeAnotherSessionAndSwitchBackToOriginSession();
}
}
在Spring,Spring Boot或Spring Data中是否有标准解决方案?
答案 0 :(得分:0)
我认为你在视图模式中尝试使用Open Session,这种模式的性能非常差,而视图层是准备管理hibernate或其他jpa实现异常的。为什么不使用带有服务层的spring数据将pojos对象转换为dto以供视图层使用?
当您使用多个查询获取大量数据信息时,使用此模式时,OutOfMemory是典型的,如果您不使用此模式,则此问题将会消失。