Java JPA OneToMany渴望获取不起作用

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 {

我有一个奇怪的问题,两个实体在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 {

    // 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

}