2016-05-17 13 views
0

Ich habe dieses Szenario:JPA - Reload @OneToMany Abhängigkeiten automatisch

public abstract class AbstractEntity { 
    @Id @GeneratedValue(strategy = GenerationType.TABLE) 
    protected Long id; 
} 

public class User extends AbstractEntity { 
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) 
    private Set<Dependent> dependents; 
} 

public class Dependent extends AbstractEntity { 
    @ManyToOne 
    @JoinColumn 
    private User user; 
} 

Als ich insert() eine neue User Instanz mit einigen Dependent ‚s versuchen, die bereits vorhanden sind, in der Datenbank, was bedeutet, dass sie das id Feld bevölkert, bekomme ich eine Detached entity passed to persist Ausnahme.

Es kann durch manuelles Laden aller Dependent s aus der Datenbank gelöst werden, aber es sieht nicht richtig aus.

Ich würde gerne wissen, wie JPA automatisch geladen werden, wenn id Feld ausgefüllt ist. Wie kann ich das machen?

Antwort

1

Wenn Sie JPA API verwenden verwenden:

EntityManager.merge(T t) 

statt

EntityManager.persist(Object object) 

Da Sie CascadeType.ALL verwenden, wenn Sie Druck verwenden, versucht der JPA-Provider die Nutzer zu aktualisieren (falls sie in der Datenbank vorhanden sind) oder erstellt neue.

Dokumentation: http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html.

+0

JPA könnte besser sein –

Verwandte Themen