ausbreitende Ich habe folgendes 2 entites:unidirektional OneToMany mit zusammengesetzten Schlüsseln Kinder, nicht Eltern id
@Entity
@Table(name = "PARENT")
public class ParentEntity{
@Id
@Column(name = "PARENT_ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "dtvSeq")
@SequenceGenerator(name = "dtvSeq", sequenceName = "PARENT_ID_SEQ")
private Long parentId;
@OneToMany(mappedBy = "childEntityPk.parentId", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
Collection<ChildEntity> childrenEntities;
//getters and setters ommited
}
Und die Kinder Einheit, mit einem zusammengesetzten Primärschlüssel, zum Teil PARENT_ID Referenzierung (fk):
@Entity
@Table(name = "CHILDREN")
public class ChildEntity {
@EmbeddedId
private ChildEntityPk childEntityPk;
//other fields
//getter and setters ommited
@Embeddable
private class ChildEntityPk implements Serializable{
long parentId;
String name;
}
}
Es funktioniert perfekt zum Abrufen von Daten. Wenn ich jedoch eine ParentEntity und ihre untergeordneten Entitäten auf einmal beibehalten möchte, erhalte ich eine Ausnahme von Oracle.
Diese Ausnahme wird ausgelöst, weil Hibernate childEntity.childEntityPk.parentId nicht aktualisiert hat und versucht, null einzufügen.
Ich spielte auch mit @JoinColumn, aber ohne Erfolg.
Ich möchte kein bidirektionales Mapping haben.
müssen Sie nicht mehr für '@ EmbeddedId' gehen. Sie können einfach mehrere Felder mit '@ Id' versehen, was den gleichen Effekt hat, aber Dinge wie' childEntityPk.parentId' löscht. Die Lösungen, die ich sehe, sind entweder eine bidirektionale Zuordnung, die Sie nicht möchten, oder Sie füllen die untergeordneten Entitäten mit der übergeordneten ID, bevor Sie – XtremeBaumer
einfügen, was ist die Ausnahme? – Salman
nur eine Oracle-Ausnahme, weil Hibernate versucht, Null in Parent-ID-Feld der Children-Tabelle, die nicht Nullable ist – chouk