我使用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