问问题
4619 次
1 回答
1
与其lazy="false"
在类元素上使用,不如在集合上使用它。也就是说,例如,每当您获取一个User
对象时,由于集合UserSpaceRole
被标记为非惰性,该集合也将被获取。
lazy="false"
在 class 元素上使用会产生一些不良后果。通常,当集合不是我上面所说的惰性时,整个集合是使用连接、选择或子选择来获取的,具体取决于您的获取策略。例如,使用 select 策略,当您User
从数据库中获取 a 时,hibernate 会发出两条 select 语句:一条用于用户本身,一条用于集合。但是,hibernate 可以选择代理集合中的各个元素。
使用lazy="false"
,hibernate 无法代理这些对象,并且通常诉诸于使用单个查询与两个表之间的连接。这可能并不总是需要的。
但是,正确的方法是查看您的架构并首先了解异常发生的原因。在关闭会话后,您尝试从分离的对象(请参阅此处)访问属性或集合。我会查看服务层,看看如何在关闭会话并将对象传递给调用者之前获取所需的所有数据。
于 2011-05-24T06:08:07.110 回答