Java 在视图中休眠打开会话与EclipseLink延迟加载

Java 在视图中休眠打开会话与EclipseLink延迟加载,java,hibernate,jpa,eclipselink,lazy-loading,Java,Hibernate,Jpa,Eclipselink,Lazy Loading,tl;dr:我看到很多人建议不要在hibernate中使用OpenSessionInView。EclipseLink的惰性加载方法也受到同样的批评吗 在使用EclipseLink一段时间后,我正在尝试冬眠。起初,我对有一个lazyiinitializationexception感到震惊,EclipseLink从盒子里取出了它。在收集信息后,以下是我对幕后发生的事情的理解: 日食 当尝试访问必须延迟加载的字段时,它会在池中找到实体管理器,并从那里进行数据库查询 休眠 使用openSessionI

tl;dr:我看到很多人建议不要在hibernate中使用OpenSessionInView。EclipseLink的惰性加载方法也受到同样的批评吗


在使用EclipseLink一段时间后,我正在尝试冬眠。起初,我对有一个
lazyiinitializationexception
感到震惊,EclipseLink从盒子里取出了它。在收集信息后,以下是我对幕后发生的事情的理解:

日食 当尝试访问必须延迟加载的字段时,它会在池中找到实体管理器,并从那里进行数据库查询

休眠 使用openSessionInView时,会话将保持打开状态,直到生成视图

我发现EclipseLink方法要好得多,我想知道为什么hibernate没有采用这种方法,或者它是否可以在其中实现。据我所知,如果在视图呈现后必须通过ajax请求填充字段,则即使openSessionInView设置为true,hibernate也无法使用该字段。此外,我觉得保持会话活动可能是一个瓶颈,但我的理解太粗糙,不可信。EclipseLink只是“关闭”连接,将其放回池中,并根据需要获取连接

说到这里:

  • 视图中的打开会话已关闭。EclipseLink的惰性加载方法也受到同样的批评吗? 我理解n+1问题,但我觉得通过记录查询和相应地修改代码,可以轻松解决这个问题。所以,即使日食也会受到影响,这也没什么大不了的

  • 这两种方法都有利弊吗?还是只反对hibernate的方法

  • 有没有办法让hibernate采用日食法?我已经读到,冬眠比日食更有效,这是个问题

1。我使用这种模式(后来的Hibernate,现在的Eclipselink+Wicket/Tomcat),应用程序没有太大的规模(内部网)2。向blog道歉:有时候在架构师级别不知道具体的数据原子:模板(前端)developer1可能包含或排除这些数据原子。我使用这种模式(后来的Hibernate,现在的Eclipselink+Wicket/Tomcat),应用程序没有太大的规模(内部网)2。向blog道歉:有时候在架构师级别不知道具体的数据原子:模板(前端)开发人员可能会包括或排除这些原子