Hibernate session.load不会填充对象的arraylist属性

时间:2012-03-16 15:03:06

标签: java hibernate hibernate-session

我在使用hibernate的session.load函数时遇到了问题。我尝试根据ID获取对象,并返回一个好的对象,但只在实例中设置了原始属性。我有一个属性是一个集合(映射到一些其他对象),但它没有在集合后检索,并且集合的字段为空。

有没有人知道为什么提取不能按预期工作?

由于

3 个答案:

答案 0 :(得分:0)

检查ORM上的提取策略。一些属性可以设置为惰性而不是急切。您可能必须在加载后使用Hibernate.Initialize来填充所有属性。否则,您将不得不修改您的ORM以使用预先加载。使用注释,您可以在@entity属性之后设置以下属性以默认关闭延迟:

@ org.hibernate.annotations.Proxy(lazy = false)

但是,这会导致在获取时加载所有内容。

答案 1 :(得分:0)

我认为Set是延迟加载的,如果你想要它被填充,你可以简单地调用该Set的getter并且它将被加载。 如果您希望它一直加载

fetch = FetchType.EAGER

示例:

@OneToMany(mappedBy = "program", fetch=FetchType.EAGER)
private final List<Instruction> instructions = new ArrayList<Instruction>();

到你的实体的映射

答案 2 :(得分:0)

除非你100%肯定,否则你总是希望加载孩子,设置EAGER抓取可能会导致不良后果。 JBoss工具集默认设置为LAZY

相反,您需要初始化子关联,这可以通过多种方式完成:

  1. Hibernate.initialize(myObject.getChildren())
  2. 致电关联size
  3. 上的myObject.getChildren().size()
  4. Criteria查询中,将关联中的FetchMode设置为JOINcriteria.setFetchMode("children", FetchMode.JOIN);