JPA OneToMany eager fetch funktioniert nicht

Ich habe ein seltsames problem mit zwei Einheiten mit eins-zu-viele-Beziehung in JPA. Ich verwende Glassfish 3.1.2.2 mit EclipseLink 2.3.2. Dies ist die erste Entität:

@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

}

- Und das ist das zweite:

@Entity
public class SampleQuery implements Serializable {

    //Simple properties, including id (primary key)

    @ManyToOne(cascade = {CascadeType.PERSIST})
    private SampleQueryGroup group;

    //Gettes/setters, hashcode/equals

}

Habe ich eine zustandslose session-bean, die mit einem injizierten EntityManager laufen SampleQueryGroup.findAll benannte Abfrage. Ich habe auch eine CDI managed bean fordert die SSB-Methode und durchläuft die SampleQueryGroup.getSampleQueries() für jeden SampleQueryGroup von der Methode zurückgegeben. Ich wusste nicht, fügen Sie den code, wie es ist ziemlich einfach und irgendwie standard für alle Java-EE-Anwendung.

Das problem ist das eager fetch funktioniert nicht, und getSampleQueries() gibt eine leere Liste zurück. Jedoch, wenn ich den fetch-Typ wieder auf FetchType.FAUL, alles funktioniert und ich bekomme die Liste korrekt gefüllt. Ich verstehe nicht, warum dies geschieht. Hat es was zu tun mit internen caching-Mechanismen?

InformationsquelleAutor Arash Shahkar | 2013-05-04

Schreibe einen Kommentar