2012-03-16 45 views
3

我使用hibernate的session.load函数时遇到了问题。我尝试根据ID获取对象,并返回一个好对象,但只在实例中设置基本属性。我有一个属性是一个集合(映射到其他对象),但它没有被设置后检​​索,并且该集合的字段为空。Hibernate session.load不会填充对象的数组列表属性

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

谢谢

+0

是哟你使用注释或XML来定义你的ORM? – 2012-03-16 15:15:20

+0

那么这个问题解决了还是仍然是一个问题? – bvanvelsen 2012-03-26 12:18:35

回答

0

检查ORM上的抓取策略。一些属性可以设置为懒惰而不是渴望。您可能需要在加载后使用Hibernate.Initialize来填充所有属性。否则,您将不得不修改您的ORM以使用急切加载。使用annotaions,您将设置以下属性后@Entity属性关闭默认懒:

@ org.hibernate.annotations.Proxy(懒惰=假)

然而,这将导致一切加载取回时。

0

我猜这个Set是懒加载的,如果你想让它被填充,你可以简单地调用该Set的getter并且它会被加载。 如果你希望它被装载所有你可以添加

fetch = FetchType.EAGER 

例子时间:

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

到你的实体的映射

0

除非你是100%肯定的,你总是希望要装载的儿童,设置EAGER可能导致不希望的效果。默认情况下,JBoss工具集提取到LAZY

相反,你需要初始化子关联,其可以以各种方式来完成:

  1. Hibernate.initialize(myObject.getChildren())
  2. 调用size上的关联:myObject.getChildren().size()
  3. Criteria查询,设置FetchMode上关联到JOINcriteria.setFetchMode("children", FetchMode.JOIN);