推土机和懒惰地初始化集合错误

时间:2014-02-18 13:35:03

标签: java dozer

我正在使用Dozer从一个对象映射到另一个对象,但是我发现错误:

 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ... , could not initialize proxy - no Session

当我在为所有集合映射field.size()之前使用它时,它确实很烦人。是否有一些选项可以用初始化的所有集合来加载hibernate对象?|

1 个答案:

答案 0 :(得分:1)

这不是推土机的问题。您正在以错误的方式访问您的数据。在你的hibernate实体中,你有一些惰性引用(对于集合,另一个实体,......),但你将它转换为hibernate会话之外的某个bean(你的实体处于所谓的'分离'状态)。

此问题的解决方案取决于您的情况。你可以:

  • 排除给定属性(如果您不需要它),因此dozer
  • 将不会访问它
  • 将推土机转换为代码块,这是在hibernate的会话
  • 如果您仍然引用当前会话,则重新附加您的实体

映射字段size甚至可以用于延迟集合。元素的数量可能是已知的,但内容不是。

编辑:更多解决方案:

  • 将引用的集合标记为渴望(不是懒惰),但这可能会减慢其他查询并增加内存消耗(不推荐)
  • 使用Hibernate.initialize()
  • 初始化引用的延迟集合