Folgendes Szenario (getestet mit Eclipselink Version 2.3.2):
Eine Entität Kunde hat eine 1:n Beziehung zu einer Entität Bestellung. Der L2-Cache ist deaktiviert.
@Entity public class Kunde { @Id @Column(name = "ID", nullable = false) private final String id; @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "kunde") @JoinColumn(name = "BESTELLUNGEN_ID") private Collection bestellungen; ... } @Entity public class Bestellung { @Id @Column(name = "ID", nullable = false) private final String id; @ManyToOne(cascade = CascadeType.PERSIST, optional = false) @JoinColumn(name = "KUNDE_ID", nullable = false) private Kunde kunde; ... }
Nun wird eine neuer Datensatz für Entität Bestellung angelegt und peristiert.
Kunde kunde1 = new Kunde("123456789"); em.persist(b1); Bestellung bestellung1 = new Bestellung("best-abc"); bestellung1.setKunde(kunde1); em.persist(bestellung1);
Nach dem Persistieren der neuen Bestellung wird aber nicht die Releation zu Kunde aktualisiert. Wenn jetzt der Kunde neu ausgelesen wird, ist die Liste der Bestellungen leer.
Kunde kunde1 = em.findById(Kunde.class. "123456789"); List bestellungen = kunde.getBestellungen();
Die Liste der Bestellungen wird nur aktualisiert, wenn dem Kunden explizit die neue Bestellung zugewiesen wird.
Kunde kunde1 = new Kunde("123456789"); em.persist(b1); Bestellung bestellung1 = new Bestellung("best-abc"); bestellung1.setKunde(kunde1); // Bestellung explizit setzen kunde1.addBestellung(bestellung1); em.persist(bestellung1);
Mit dieser Anpassung wird die Liste der Bestellungen aktualisiert.