我使用Spring Data Jpa和Hibernate是提供者。加载父项时热切取孩子
我有一个父类映射如下:
@Entity
@Table(name="parent")
public class Parent {
private List<Child> childs;
private List<AnotherChild> anotherChilds;
@OneToMany(mappedBy = "parent", fetch = FetchType.EAGER)
public List<Child> getChilds() {
return childs;
}
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
public List<AnotherChild> getAntoherChilds() {
return anotherChilds;
}
}
和儿童:
@Entity
@Table(name="child")
public class Child {
private Parent parent;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "column_name")
public Parent getParent() {
return patern;
}
}
@Entity
@Table(name="another_child")
public class AnotherChild {
private Parent parent;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "column_name")
public Parent getParent() {
return patern;
}
}
- 当我从数据库装载父,它不会加载的 名单孩子马上和
- 当我调用parent.getChilds(),它返回 null。
你能提供一些建议吗?我错了吗?谢谢。
编辑:
经过一番研究,我发现,当我只有一个孩子,它急切地加载(如它应该)。但是,当我有多个孩子时,它不会 - 即使它已被标记为FetchType.EAGER和其他FetchType.LAZY。
注意:如果我将它们都标记为FetchType.EAGER,它将抛出MultipleBagFetchException:无法同时获取多个包。
同样的事情发生时,我将其标注为使用@Fetch(FetchMode.JOIN)语句
尝试添加两个类的表名实体注释 –
实际上它已经是一个实体。我更新了我的问题。 – dkakunsi
如果您打算使用特定于Hibernate的注释,则可以将@ org.hibernate.annotations.Fetch(org.hibernate.annotations.FetchMode.JOIN)添加到一对多字段中。这将强制Hibernate加载父项的子项。 – manish