错误“未能懒惰地初始化角色集合(...)无法初始化代理--没有会话”在中进行了广泛的讨论,但我想知道自连接(例如,经理/员工关系中的经理也是员工)是否是一种特殊情况。坦率地说,我对这个错误和对它的解释感到困惑,但我想我应该从这个“特殊情况”问题开始,因为在我看来,它可能是这样的,所以如何处理这个错误的答案可能不适用于自组织。我还会提到,我正在使用Spring MVC,当我试图向经理展示他们所有的员工时,就会出现错误。
发布于 2015-10-04 18:01:30
如果hibernate创建的实体对象是延迟加载的,就不能期望它在Service和DAO层之外正常运行。这是因为这样的对象是由hibernate创建的代理,只有在代理与底层数据库(hibernate会话)保持连接的情况下,字段才会在需要时加载。一旦您离开Service或DAO层,例如使用DAO层获取对象并尝试在控制器中使用它,该对象将断开连接,任何尚未获取的字段都将无法从数据库中获取数据。此外,您将无法将对象保存回数据库(您可能会争辩说可以保存,但我不确定对于复杂对象是否可以正确地保存)。
解决方案是迫不及待地加载对象,这意味着在创建对象时,所有字段都应该由hibernate加载(这是一个开销很大的操作)。
(更好的)替代解决方案是将控制器中的逻辑移动到服务层。
https://stackoverflow.com/questions/32930538
复制相似问题