Ich habe Probleme mit der Zusammenführung. Meine Update-Methode funktioniert auf diese Weise:[Ruhezustand] Verschmelzen vorübergehendes Objekt mit Kindern
void update(Parent parent) {
evict(parent);
merge(parent);
}
Meine Klassen:
Parent {
Long id;
List<Children> childrens;
@OneToMany(targetEntity =ChildrenImpl.class, fetch=FetchType.LAZY)
@JoinColumn(name="PARENT")
@org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.ALL)
List<Children> getChildrens(){...}
@Id
Long getId() {...}
}
Children{
Parent parent;
@ManyToOne(targetEntity = ParentImpl.class, fetch = FetchType.LAZY)
@org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.ALL)
@JoinColumn(name = "PARENT", nullable = false)
Parent getParent(){...}
}
Wenn ich einen neuen Parent (transienten) Objekt erstellen und neue Kinder hinzu und aktualisiert Der Versuch (evict & merge) meldet sich dann zeigen ich dies nach bündig Hibernate Session:
INSERT PARENT //everythings here is ok.
INSERT CHILDREN // but without parent id(id=null)
Auftrag ist gut, aber Kinder Eltern-ID in Einsatz nicht haben. Alles funktioniert gut, wenn Parent in der Datenbank beibehalten wird, dann haben Kinder immer eine gute ID.
Irgendwelche Ideen, was ich tun soll, um ID von transientem Objekt zu erhalten (von persistiert ist ok).
Grüße KZ.
Haben Sie versucht, die vorübergehende Instanz zuerst über session.saveOrUpdate() zu speichern, sodass eine ID an die Entität angehängt wird? Haben Sie einen Debugger eingecheckt, dass Ihre Entität eine ID hat, wenn die Einfügung für das untergeordnete Objekt ausgeführt wird? – fasseg