Langsam bin ich mit meinem Latein am Ende. Ich versuche Relationen mit zusammengesetzten Schlüsseln zu realisieren und erhalte die verschiedensten Fehlermeldungen.
Ausgangssituation:
Tabelle TEIL, Schlüssel=FUE_GR_ID+VARIANTE_ID+TEIL_ID
FUE_GR_ID|VARIANTE_ID|TEIL_ID|ERSTELLER|ERDATUM
Tabelle REL_TEIL_WERT, Schlüssel=FUE_GR_ID+VARIANTE_ID+TEIL_ID+WERT
FUE_GR_ID|VARIANTE_ID|TEIL_ID|WERT
Versuch 1:
@Table(name="TEIL")
public class Teil implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected TeilPK teilPK;
@Basic(optional = false)
private String ersteller;
@Basic(optional = false)
@Temporal(TemporalType.TIMESTAMP)
private Date erdatum;
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "teil")
private List<RelTeilWert> relTeilWert;
//..
}
@Embeddable
public class TeilPK implements Serializable {
@Basic(optional = false)
@Column(name = "FUE_GR_ID")
private long fueGrId;
@Basic(optional = false)
@Column(name = "VARIANTE_ID")
private long varianteId;
@Basic(optional = false)
@Column(name = "TEIL_ID")
private long teilId;
//..
}
@Entity
@Table(name = "REL_TEIL_WERT")
public class RelTeilWert implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected RelTeilKvsPK relTeilWertPK;
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="FUE_GR_ID", referencedColumnName="FUE_GR_ID"),
@PrimaryKeyJoinColumn(name="VARIANTE_ID", referencedColumnName="VARIANTE_ID"),
@PrimaryKeyJoinColumn(name="TEIL_ID", referencedColumnName="TEIL_ID")
})
@ManyToMany
private List<Teil> teil;
//..
}
@Embeddable
public class RelTeilWertPK implements Serializable {
@Basic(optional = false)
@Column(name = "FUE_GR_ID")
private long fueGrId;
@Basic(optional = false)
@Column(name = "VARIANTE_ID")
private long varianteId;
@Basic(optional = false)
@Column(name = "TEIL_ID")
private long teilId;
@Basic(optional = false)
@Column(name = "WERT")
private String wert;
Fehlermeldung:
org.hibernate.HibernateException: Missing table: REL_TEIL_WERT_TEIL
Versuch 2:
@Table(name="TEIL")
public class Teil implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected TeilPK teilPK;
@Basic(optional = false)
private String ersteller;
@Basic(optional = false)
@Temporal(TemporalType.TIMESTAMP)
private Date erdatum;
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="FUE_GR_ID", referencedColumnName="FUE_GR_ID"),
@PrimaryKeyJoinColumn(name="VARIANTE_ID", referencedColumnName="VARIANTE_ID"),
@PrimaryKeyJoinColumn(name="TEIL_ID", referencedColumnName="TEIL_ID")
})
@ManyToMany
private List<RelTeilWert> relTeilWert;
//..
}
@Embeddable
public class TeilPK implements Serializable {
@Basic(optional = false)
@Column(name = "FUE_GR_ID")
private long fueGrId;
@Basic(optional = false)
@Column(name = "VARIANTE_ID")
private long varianteId;
@Basic(optional = false)
@Column(name = "TEIL_ID")
private long teilId;
//..
}
@Entity
@Table(name = "REL_TEIL_WERT")
public class RelTeilWert implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected RelTeilKvsPK relTeilWertPK;
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "relTeilWert")
private List<Teil> teil;
//..
}
@Embeddable
public class RelTeilWertPK implements Serializable {
@Basic(optional = false)
@Column(name = "FUE_GR_ID")
private long fueGrId;
@Basic(optional = false)
@Column(name = "VARIANTE_ID")
private long varianteId;
@Basic(optional = false)
@Column(name = "TEIL_ID")
private long teilId;
@Basic(optional = false)
@Column(name = "WERT")
private String wert;
Fehlermeldung:
Missing column: fueGr_FUE_GR_ID in TEIL
Versuch 3:
@Table(name="TEIL")
public class Teil implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected TeilPK teilPK;
@Basic(optional = false)
private String ersteller;
@Basic(optional = false)
@Temporal(TemporalType.TIMESTAMP)
private Date erdatum;
@JoinTable(name="REL_TEIL_KVS", joinColumns={
@JoinColumn(name="FUE_GR_ID", referencedColumnName="FUE_GR_ID"),
@JoinColumn(name="VARIANTE_ID", referencedColumnName="VARIANTE_ID"),
@JoinColumn(name="TEIL_ID", referencedColumnName="TEIL_ID")
})
@ManyToMany
private List<RelTeilWert> relTeilWert;
//..
}
@Embeddable
public class TeilPK implements Serializable {
@Basic(optional = false)
@Column(name = "FUE_GR_ID")
private long fueGrId;
@Basic(optional = false)
@Column(name = "VARIANTE_ID")
private long varianteId;
@Basic(optional = false)
@Column(name = "TEIL_ID")
private long teilId;
//..
}
@Entity
@Table(name = "REL_TEIL_WERT")
public class RelTeilWert implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected RelTeilKvsPK relTeilWertPK;
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "relTeilWert")
private List<Teil> teil;
//..
}
@Embeddable
public class RelTeilWertPK implements Serializable {
@Basic(optional = false)
@Column(name = "FUE_GR_ID")
private long fueGrId;
@Basic(optional = false)
@Column(name = "VARIANTE_ID")
private long varianteId;
@Basic(optional = false)
@Column(name = "TEIL_ID")
private long teilId;
@Basic(optional = false)
@Column(name = "WERT")
private String wert;
Fehlermeldung:
org.hibernate.HibernateException: Missing column: relTeilWert_FUE_GR_ID in VT.REL_TEIL_WERT
Versuch 4:
@Table(name="TEIL")
public class Teil implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected TeilPK teilPK;
@Basic(optional = false)
private String ersteller;
@Basic(optional = false)
@Temporal(TemporalType.TIMESTAMP)
private Date erdatum;
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "relTeilWert")
private List<RelTeilWert> relTeilWert;
//..
}
@Embeddable
public class TeilPK implements Serializable {
@Basic(optional = false)
@Column(name = "FUE_GR_ID")
private long fueGrId;
@Basic(optional = false)
@Column(name = "VARIANTE_ID")
private long varianteId;
@Basic(optional = false)
@Column(name = "TEIL_ID")
private long teilId;
//..
}
@Entity
@Table(name = "REL_TEIL_WERT")
public class RelTeilWert implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected RelTeilKvsPK relTeilWertPK;
@JoinTable(name="REL_TEIL_KVS", joinColumns={
@JoinColumn(name="FUE_GR_ID", referencedColumnName="FUE_GR_ID"),
@JoinColumn(name="VARIANTE_ID", referencedColumnName="VARIANTE_ID"),
@JoinColumn(name="TEIL_ID", referencedColumnName="TEIL_ID")
})
@ManyToMany
private List<Teil> teil;
//..
}
@Embeddable
public class RelTeilWertPK implements Serializable {
@Basic(optional = false)
@Column(name = "FUE_GR_ID")
private long fueGrId;
@Basic(optional = false)
@Column(name = "VARIANTE_ID")
private long varianteId;
@Basic(optional = false)
@Column(name = "TEIL_ID")
private long teilId;
@Basic(optional = false)
@Column(name = "WERT")
private String wert;
Fehlermeldung:
org.hibernate.AnnotationException: referencedColumnNames(FUE_GR_ID, VARIANTE_ID, TEIL_ID) of myPackage.Teil.teil referencing myPackage.RelTeilWert not mapped to a single property
Ich hab schon im HibernateManual geschaut und auch das allwissende Orakel “Google” gefragt und komme kein Stück weiter.