Ich brauche Ihre Hilfe, um die Beziehung in Hibernate von zwei Tabellen mit der @ElementCollection Annotation zuzuordnen.JPA: wie @ElementCollection Annotation verwenden?
Die erste ist die übergeordnete Tabelle
Tabellenname: Geordnetes
DB Columns
KEY1 Char (first primary key field)
KEY2 Char (second primary key field)
DESCRIPTION Char
DEPENDENTID BigInt
Der zweite die abhängige Tabelle
Tablename ist: Dependent
DB Columns
PARENTID BigInt (first primary key field)
CODE Char (second primary key field)
FIELD1 Char
FIELD2 Char
Ich brauche die PK für beide Tabellen mit @EmbeddedId Anmerkung zu definieren, so habe ich die zwei Klassen erstellt:
@Embeddable
public class ParentPK implements Serializable
{
@Column(name="K1")
private String iK1;
@Column(name="K2")
private String iK2;
// I omit the constructor, getter, setter, equals, hashcode method
}
@Embeddable
public class DependentPK implements Serializable
{
@Column(name="PARENTID")
private String iParentId;
@Column(name="CODE")
private String iCode;
// I omit the constructor, getter, setter, equals, hashcode method
}
und dann habe ich die beiden Bohnen erstellt:
Die Klasse für die abhängige Tabelle .
Beachten Sie, dass ich nicht will
@Entity
@Table(name = "DEPENDENT")
public class DependentBean implements Serializable
{
@EmbeddedId
private DependentPK iDependentPK;
@Column(name = "FIELD1")
private String iField1;
@Column(name = "FIELD2")
private String iField2;
// I omit the constructor, getter, setter methods
}
Und die Klasse jede relationale Anmerkung haben für die übergeordnete Tabelle
@Entity
@Table(name = "PARENT")
public class ParentBean implements Serializable
{
@EmbeddedId
ParentPK iParentPK;
@Column(name = "DESCRIPTION")
private String iDescription;
@Column(name = "DEPENDENTID")
private long iDependentId;
@ElementCollection
@CollectionTable(name="DEPENDENT", joinColumns={@JoinColumn(name="PARENTID", referencedColumnName="DEPENDENTID")})
private Set<DependentBean> iDependentBeans = new HashSet<DependentBean>();
// I omit the constructor, getter, setter methods
}
Als ich mich den Fehler hätte zu implementieren versuchen:
Caused by: org.hibernate.MappingException: Foreign key (FK9619C2A17B05CB2:DEPENDENT [iDependentBeans_PARENTID,iDependentBeans_CODE])) must have same number of columns as the referenced primary key (DEPENDENT [PARENTID,iDependentBeans_PARENTID,iDependentBeans_CODE])
Also mache ich etwas falsch, aber ich kann mir nicht vorstellen, was. Könnte mir bitte jemand helfen?
Erstmal Danke für deine Antwort. Aber ich habe gesehen, dass die Verwendung von onetomany Annotation Hibernate einen Beitritt machen, wenn auf die Elterntabelle zugegriffen wird. Ich muss nur auf die abhängige Tabelle zugreifen, wenn auf ihr Attribut zugegriffen wird.Also, wie geht das? – gpezzini
Ich denke, Sie verwenden @OneToMany (fetch = FetchType.EAGER), dies wird sicherlich eine Verknüpfung wie Sie sagen. Versuchen Sie, @OneToMany (fetch = FetchType.LAZY) zu verwenden, und stellen Sie sicher, dass Sie vor dem Schließen der Sitzung auf das Attribut zugreifen. Andernfalls erhalten Sie eine LazyInitializationException. – study
Hallo nochmal, aber ist es möglich ein OneToMany zwischen meinen beiden Tabellen zu definieren ** Eltern ** und ** Abhängig **? Wie Sie sehen ** Die Tabelle ** Parent ** enthält das Feld 'DEPENDENTID', das möglicherweise mit dem Feld 'PARENTID' der Tabelle ** Dependent ** verknüpft ist. ** Dependent ** Tabelle hat ein anderes Primärschlüsselfeld: 'CODE'. Die beiden Tabellen haben ihre eigenen Primärschlüssel, die unter Verwendung einer einbettbaren Klasse beschrieben werden. Also, ist es Ihrer Meinung nach möglich, die @ OneToMany Annotation in diesem Szenario zu verwenden? Ich habe es auf verschiedene Arten ohne Erfolg versucht und ich habe viele Suchen ausprobiert, ohne nichts zu finden. Vielen Dank im Voraus für Ihre Zeit – gpezzini