3

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

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

谢谢

4

3 回答 3

0

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

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

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

于 2012-03-16T15:14:07.290 回答
0

除非您是 100% 肯定的,否则您将始终希望加载孩子,设置EAGER获取可能会导致不良影响。JBoss Tools 默认设置为 fetching LAZY

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

  1. Hibernate.initialize(myObject.getChildren())
  2. 调用size关联:myObject.getChildren().size()
  3. Criteria查询中,将FetchMode关联设置为JOINcriteria.setFetchMode("children", FetchMode.JOIN);
于 2012-03-18T14:05:16.287 回答
0

我猜 Set 是延迟加载的,如果你想填充它,你可以简单地调用那个 Set 的 getter,它就会被加载。如果您希望它一直被加载,您可以添加

fetch = FetchType.EAGER

例子:

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

到您的实体的映射

于 2012-03-16T15:15:33.233 回答