我在JPA中遇到了兩個具有一對多關係的實體的奇怪問題。我在EclipseLink 2.3.2上使用Glassfish 3.1.2.2。這是第一個實體:JPA OneToMany渴望獲取不起作用
@NamedQueries({
@NamedQuery(name="SampleQueryGroup.findAll", query="SELECT g FROM SampleQueryGroup g")
})
@Entity
public class SampleQueryGroup implements Serializable {
// Simple properties, including id (primary key)
@OneToMany(
mappedBy = "group",
fetch = FetchType.EAGER,
cascade = {CascadeType.REMOVE, CascadeType.MERGE}
)
private List<SampleQuery> sampleQueries;
// Gettes/setters, hashcode/equals
}
這是第二個:
@Entity
public class SampleQuery implements Serializable {
// Simple properties, including id (primary key)
@ManyToOne(cascade = {CascadeType.PERSIST})
private SampleQueryGroup group;
// Gettes/setters, hashcode/equals
}
我有一個使用注入EntityManager
運行SampleQueryGroup.findAll
命名查詢無狀態會話bean。我還有一個CDI託管bean,它調用SSB方法,並通過SampleQueryGroup.getSampleQueries()
迭代該方法返回的每個SampleQueryGroup
。我沒有粘貼代碼,因爲它非常簡單,並且對於任何Java EE應用程序來說都是標準的。
問題是渴望獲取不起作用,getSampleQueries()
返回一個空列表。但是,當我將獲取類型更改回FetchType.LAZY時,一切正常,我得到正確填充的列表。我不明白爲什麼會發生這種情況。它與內部緩存機制有什麼關係?
謝謝詹姆斯,我認爲這是問題。在堅持實體的SSB方法中,是否有必要明確地設置/添加每個實體到另一個實體? – 2013-05-07 21:13:26