jpa hibernate composite foreign key mapping
Ich habe Probleme beim einrichten jpa-mappings für einige Entitäten. Ich habe eine übergeordnete Entität definiert, wie die folgenden.
@Entity
@Table(name="EIF_INSTANCE_HDR")
public class InstanceEntity implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator="eif_inst_gen")
@SequenceGenerator(name="eif_inst_gen",sequenceName="EIF_INSTANCE_SEQ")
@Column(name = "EAIH_ID")
private Long eaihid;
@Column(name = "EAD_ID")
private Long eadid;
@OneToMany(targetEntity=InstanceNotifyEntity.class, mappedBy="instance",fetch=FetchType.EAGER, cascade = CascadeType.ALL)
private List<InstanceNotifyEntity> userDetails = new ArrayList<InstanceNotifyEntity>();
}
Dann habe ich ein Kind Einheit w/einem zusammengesetzten Schlüssel und Fremdschlüssel auf den Primärschlüssel dieser Tabelle wie folgt vor:
@Entity
@Table(name="EIF_INST_NOTIFIED")
public class InstanceNotifyEntity implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@ManyToOne
@JoinColumn(name="EAIH_ID", referencedColumnName="EAIH_ID")
private InstanceEntity instance;
@Id
@Column(name="USER_ID")
private Long userId;
@Column(name="COMMENT_TXT")
private String commentText;
}
Ich weiß, die untergeordnete Entität ist falsch, aber ich bin nicht sicher, wie diese einzustellen ist, um einen zusammengesetzten PK. Ich weiß, ich brauche, um das setup eine PK Klasse, aber ich bin nicht sicher, wie das zu tun, wenn ein Feld ist ein Fremdschlüssel für den übergeordneten Klasse. Und einmal ist das setup wie würden die parent-Referenz die untergeordnete Entität?
Jede Hilfe ist willkommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist geregelt durch JPA 2 spec Abschnitt 2.4.1, "Primärschlüssel Entsprechend Abgeleitete Identitäten". Der Abschnitt enthält zwei Beispiele direkt für Ihr problem.
Als wie in der Spezifikation beschrieben, gibt es zwei Möglichkeiten zur Darstellung der child-Entität-Schlüssel (in diesem Fall:
@IdClass
@EmbeddedId
Hier ist eine grobe Skizze des
EmbeddedId
Weg. Ich wählteEmbeddedId
willkürlich, aber die Wahl zwischenIdClass
undEmbeddedId
ist signifikant. Sie könnte sich anders entscheiden.Der übergeordneten Entität muss eine änderung: die
userDetails
AttributmappedBy
sollte " - id.eaihId". Ich denke, das ist es, aber ich habe nicht verwendet Entitäten genau so vor. Könnte etwas verpasst haben... bitte posten, wenn Sie Fehler sehen.War ich auch vor dem gleichen Problem und in der Folge dieser Antwort, aber es ist nicht speichern die untergeordnete Entität mit der Muttergesellschaft. Hier die änderungen die ich vorgenommen und es funktioniert Prima. Stellen Sie unter änderungen -
Beim speichern der übergeordneten Entität festgelegt, wird das parent-Objekt an den composite-Schlüssel wie
id.setInstance(parent entire obj)