我对 JPA 中具有一对多关系的两个实体有一个奇怪的问题。我正在使用带有 EclipseLink 2.3.2 的 Glassfish 3.1.2.2。这是第一个实体:
@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
}
我有一个无状态会话 bean,它使用注入EntityManager
来运行SampleQueryGroup.findAll
命名查询。我还有一个 CDI 托管 bean,它调用 SSB 方法并针对该方法返回的SampleQueryGroup.getSampleQueries()
每个方法进行迭代。SampleQueryGroup
我没有粘贴代码,因为它非常简单,并且对于任何 Java EE 应用程序都是标准的。
问题是 Eager fetch 不起作用并getSampleQueries()
返回一个空列表。但是,当我将 fetch 类型更改回 FetchType.LAZY 时,一切正常,并且我得到了正确填充的列表。我不明白为什么会这样。它与内部缓存机制有什么关系吗?