Hibernate: Mappings

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:
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:
probier mal bei den @Joincolumns name und referencedColumnName anzugeben, dann hat Hibernate ein bischen mehr Info (Die 3 Tabellen legt er warscheinlich an weil du 2 Sector referenzierst).

Ansonsten bitte auch Fehlermeldung mitangeben :)
 
Zurück