Chtonian
Grünschnabel
Guten Morgen,
Ich bin neu hier, und hab auch direkt eine frage zu Hibernate und Mappings.
Folgendes Problem:
Ich möchte gern über Hibernate folgende Tabellenstruktur verwalten, habe jedoch bei der Umsetzung einige Probleme:
Es gibt 2 Tabellen. Die eine tabelle enthält 2 Spalten (ID, Name), sie heisst "sectors"
Die 2. Tabelle ist eine "Verknüpfungs-und-Ergänzungstabelle"; sie enthält 4 spalten:
(ID, SectorID, NegativeSectorID, Relevance) und heisst "sector_addiction"
SectorID ist ein Fremdschlüssel, der sich auf die ID in "sectors" bezieht. NegativeSectorID ist auch ein Fremdschlüssel und bezieht sich *auch* auf die ID in "sectors". Relevance ist ein Double Wert, welcher den Wert der Beziehung zwischen SectorID und NegativeSectorID definiert.
Ich habe mit Hibernate noch nicht allzuviel Erfahrung und habe erstmal folgende 2 Klassen angelegt:
Jetzt habe ich jedoch das Problem, dass ich die Rückbeziehung zur gleichen Klasse irgendwie nicht modellieren kann. Ich nehme an, dass eine One2One Beziehung zu "Sector" falsch ist, ich benötige jedoch den Namen des "Sectors" und nicht nur die ID, und eine dritte Tabelle für dich gleichen Werte ergibt keinen Sinn, da sich im Grunde nur die IDs verändern werden.
Wie dem auch sei, ich bekomme immer einen fehler wenn ich versuche Daten zu speichern:
€DIT:
Hab noch etwas vergessen.
Bei dieser Konstruktion versucht Hibernate immer eine 3. Tabelle anzulegen um die 1:1 Beziehung zu realisieren, dabei würde die Verknüpfung so wie oben angegeben eigentlich reichen
Ich bin neu hier, und hab auch direkt eine frage zu Hibernate und Mappings.
Folgendes Problem:
Ich möchte gern über Hibernate folgende Tabellenstruktur verwalten, habe jedoch bei der Umsetzung einige Probleme:
Es gibt 2 Tabellen. Die eine tabelle enthält 2 Spalten (ID, Name), sie heisst "sectors"
Die 2. Tabelle ist eine "Verknüpfungs-und-Ergänzungstabelle"; sie enthält 4 spalten:
(ID, SectorID, NegativeSectorID, Relevance) und heisst "sector_addiction"
SectorID ist ein Fremdschlüssel, der sich auf die ID in "sectors" bezieht. NegativeSectorID ist auch ein Fremdschlüssel und bezieht sich *auch* auf die ID in "sectors". Relevance ist ein Double Wert, welcher den Wert der Beziehung zwischen SectorID und NegativeSectorID definiert.
Ich habe mit Hibernate noch nicht allzuviel Erfahrung und habe erstmal folgende 2 Klassen angelegt:
Code:
@Entity
@Table(name="sectors", schema="b2w_mining")
public class Sector implements Serializable {
private static final long serialVersionUID = -6893121573963890340L;
public Sector(){}
public Sector(String sectorName){
name = sectorName;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name="sector_name")
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy="sector")
private Set<Addiction> addictions = new HashSet<Addiction>();
Code:
@Entity
@Table(name="sector_addiction", schema="b2w_mining")
public class Addiction implements Serializable {
private static final long serialVersionUID = -6893121573963890340L;
public Addiction(){}
public Addiction(double rel){
relevance = rel;
}
public Addiction(double rel, Sector sec){
this(rel);
negative = sec;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@ManyToOne
@JoinColumn
private Sector sector;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn
private Sector negative;
@Column
private double relevance;
Jetzt habe ich jedoch das Problem, dass ich die Rückbeziehung zur gleichen Klasse irgendwie nicht modellieren kann. Ich nehme an, dass eine One2One Beziehung zu "Sector" falsch ist, ich benötige jedoch den Namen des "Sectors" und nicht nur die ID, und eine dritte Tabelle für dich gleichen Werte ergibt keinen Sinn, da sich im Grunde nur die IDs verändern werden.
Wie dem auch sei, ich bekomme immer einen fehler wenn ich versuche Daten zu speichern:
Code:
Sector sub = new Sector("Text");
Sector sec = new Sector("Vater von Text");
sec.getAddiction().add(new Addiction(1.4, sub))
session.save(sec);
€DIT:
Hab noch etwas vergessen.
Bei dieser Konstruktion versucht Hibernate immer eine 3. Tabelle anzulegen um die 1:1 Beziehung zu realisieren, dabei würde die Verknüpfung so wie oben angegeben eigentlich reichen

Zuletzt bearbeitet: