JPA で 1 対多の関係を持つ 2 つのエンティティに奇妙な問題があります。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
}
そして、これは2番目のものです:
@Entity
public class SampleQuery implements Serializable {
// Simple properties, including id (primary key)
@ManyToOne(cascade = {CascadeType.PERSIST})
private SampleQueryGroup group;
// Gettes/setters, hashcode/equals
}
名前付きクエリEntityManager
を実行するために注入されたステートレス セッション Bean があります。また、SSB メソッドを呼び出し、メソッドによって返されるたびにSampleQueryGroup.findAll
反復処理を行う CDI マネージド Bean もあります。コードは非常に単純で、何らかの Java EE アプリケーションの標準であるため、貼り付けませんでした。SampleQueryGroup.getSampleQueries()
SampleQueryGroup
問題は、熱心なフェッチが機能せずgetSampleQueries()
、空のリストを返すことです。ただし、フェッチ タイプを FetchType.LAZY に戻すと、すべてが機能し、リストが正しく設定されます。なぜこれが起こるのかわかりません。内部キャッシングメカニズムと関係がありますか?