Java 在视图中休眠打开会话与EclipseLink延迟加载
tl;dr:我看到很多人建议不要在hibernate中使用OpenSessionInView。EclipseLink的惰性加载方法也受到同样的批评吗Java 在视图中休眠打开会话与EclipseLink延迟加载,java,hibernate,jpa,eclipselink,lazy-loading,Java,Hibernate,Jpa,Eclipselink,Lazy Loading,tl;dr:我看到很多人建议不要在hibernate中使用OpenSessionInView。EclipseLink的惰性加载方法也受到同样的批评吗 在使用EclipseLink一段时间后,我正在尝试冬眠。起初,我对有一个lazyiinitializationexception感到震惊,EclipseLink从盒子里取出了它。在收集信息后,以下是我对幕后发生的事情的理解: 日食 当尝试访问必须延迟加载的字段时,它会在池中找到实体管理器,并从那里进行数据库查询 休眠 使用openSessionI
在使用EclipseLink一段时间后,我正在尝试冬眠。起初,我对有一个
lazyiinitializationexception
感到震惊,EclipseLink从盒子里取出了它。在收集信息后,以下是我对幕后发生的事情的理解:
日食
当尝试访问必须延迟加载的字段时,它会在池中找到实体管理器,并从那里进行数据库查询
休眠
使用openSessionInView时,会话将保持打开状态,直到生成视图
我发现EclipseLink方法要好得多,我想知道为什么hibernate没有采用这种方法,或者它是否可以在其中实现。据我所知,如果在视图呈现后必须通过ajax请求填充字段,则即使openSessionInView设置为true,hibernate也无法使用该字段。此外,我觉得保持会话活动可能是一个瓶颈,但我的理解太粗糙,不可信。EclipseLink只是“关闭”连接,将其放回池中,并根据需要获取连接
说到这里:
- 视图中的打开会话已关闭。EclipseLink的惰性加载方法也受到同样的批评吗? 我理解n+1问题,但我觉得通过记录查询和相应地修改代码,可以轻松解决这个问题。所以,即使日食也会受到影响,这也没什么大不了的
- 这两种方法都有利弊吗?还是只反对hibernate的方法
- 有没有办法让hibernate采用日食法?我已经读到,冬眠比日食更有效,这是个问题