Java JPA OneToMany渴望获取不起作用
我有一个奇怪的问题,两个实体在JPA中有一对多的关系。我正在使用Glassfish 3.1.2.2和EclipseLink 2.3.2。这是第一个实体:Java JPA OneToMany渴望获取不起作用,java,database,jakarta-ee,jpa,eclipselink,Java,Database,Jakarta Ee,Jpa,Eclipselink,我有一个奇怪的问题,两个实体在JPA中有一对多的关系。我正在使用Glassfish 3.1.2.2和EclipseLink 2.3.2。这是第一个实体: @NamedQueries({ @NamedQuery(name="SampleQueryGroup.findAll", query="SELECT g FROM SampleQueryGroup g") }) @Entity public class SampleQueryGroup implements Serializable {
@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
}
我有一个无状态会话bean,它使用注入的EntityManager
运行SampleQueryGroup.findAll
命名查询。我还有一个CDI托管bean,它调用SSB方法,并对该方法返回的每个SampleQueryGroup
迭代SampleQueryGroup.getSampleQueries()
。我没有粘贴代码,因为它非常简单,对于任何JavaEE应用程序来说都是标准的
问题是“急取”不起作用,
getSampleQueries()
返回一个空列表。但是,当我将fetch类型改回FetchType.LAZY时,一切都正常,并且正确地填充了列表。我不明白为什么会这样。它是否与内部缓存机制有关?我的猜测是,当您添加一个新的SampleQuery时,您并没有将其添加到SampleQueryGroup sampleQueries,因此当您访问它时,它不是他们的。当它是惰性的时,在插入SampleQuery之前不会触发它,因此它就在那里
你需要维护你关系的双方。(您也可以禁用缓存或引用对象,但代码仍然会被破坏)
看,,
我的猜测是,当您添加一个新的SampleQuery时,您并没有将它添加到SampleQueryGroup sampleQueries中,因此当您访问它时,它不是他们的。当它是惰性的时,在插入SampleQuery之前不会触发它,因此它就在那里 你需要维护你关系的双方。(您也可以禁用缓存或引用对象,但代码仍然会被破坏) 看,,
谢谢你,詹姆斯,我想这就是问题所在。在持久化实体的SSB方法中,是否需要显式地将每个实体设置/添加到另一个实体?谢谢James,我认为这就是问题所在。在持久化实体的SSB方法中,是否需要显式地将每个实体设置/添加到另一个实体?
@Entity
public class SampleQuery implements Serializable {
// Simple properties, including id (primary key)
@ManyToOne(cascade = {CascadeType.PERSIST})
private SampleQueryGroup group;
// Gettes/setters, hashcode/equals
}