tl; dr :我看到很多人建议不要使用OpenSessionInView进行休眠。 EclipseLink对延迟加载的方法是否遭受同样的批评?
我在使用EclipseLink一段时间后尝试了hibernate。我最初感到震惊的是有LazyInitializationException
,EclipseLink开箱即用。收集信息后,我对这个场景背后发生的事情有了解:
的EclipseLink 当尝试访问必须延迟加载的字段时,它会在池中找到实体管理器并从那里进行数据库查询。
休眠 使用openSessionInView时,会话保持打开状态,直到生成视图。
我发现EclipseLink方法要好得多,我想知道为什么hibernate没有采用那个或者是否可以在其中实现。据我所知,如果在渲染视图后必须通过ajax请求填充字段,即使openSessionInView设置为true,也不能使用hibernate。此外,我觉得保持会话活动可能是一个瓶颈,但我的理解太粗糙,不值得信任。虽然EclipseLink只是“关闭”连接,但将其放回池中并根据需要获取它。
所以要点:
视野中的开放会话为not recommended。 EclipseLink对延迟加载的处理方式是否遭受同样的批评? 我理解n + 1问题,但我觉得可以通过记录查询和相应修改代码轻松解决。所以尽管eclipseLink也受到了影响,但这并不是什么大问题。
两种方法都有利弊吗?或只是对hibernate方法有利?
有没有办法让hibernate采用EclipseLink方法?我已经读过,hibernate比EclipseLink更具性能,这就是问题。