Hibernate: OneToOne funktioniert nicht

  • Themenstarter Themenstarter kf
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
K

kf

Gast
Hallo zusammen,

ich habe jetzt meine ersten Schritte mit Hibernate Annotations hinter mir und solange ich immer auf einer Tabelle gearbeit habe, hat bisher auch alles funktioniert wie gedacht. Nun wollte ich langsam mit verbundenen Tabellen arbeiten und bekomme die ersten Probleme.

Ich habe eine Entity 'Organisation' und eine Entity 'OrganisationType' mit jeweils einer dazugehörigen Tabelle.
In der Tabelle Organisation gibt es eine Spalte OrganisationType_id

Code:
@Entity
public class Organisation {
	
	@Id @GeneratedValue
	private Long id;
	
	private OrganisationType orgType;
	
	private String name;

        // ... getter/setter

   @OneToOne(cascade = CascadeType.ALL)
   @JoinColumn(name="OrganisationType_id")
	public OrganisationType getOrgType() {
		return orgType;
	}
}

@Entity
public class OrganisationType implements Serializable {
	
	@Id @GeneratedValue
	private Long id;
	
	private String name;

        // ... getter/setter
}

Schon das Lesen von Organisationen funktioniert leider nicht. An der gegerierten SQL-Query sieht man, das Hibernate den orgType anscheinend als ganz normales Feld interpretiert und nicht auf die OrganisationType_id-Spalte geht. Dadurch kommt es zu einem SQL-Fehler, da natürlich kein Feld orgType in der DB existiert.

Habe ich hier einen generellen Denkfehler? Funktioniert das überhaupt so mit einem OneToOne?

Wäre schön, wenn mir vielleicht jemand auf die Sprünge helfen könnte.
 
Hab das Problem selbst lösen können. 🙂

Nachdem ich die @OneToOne Annotation dierekt an das Feld orgType und nicht den getter geschrieben hatte, funktioniert nun alles.
 
Code:
@Entity
class Organisation
{
   ...
   @OneToOne
   @JoinColumn(name = "OrganisationType_id")
   private OrganisationType orgType;
   ...
}

@Entity
class OrganisationType
{
   ...
   @OneToOne(mappedBy="orgType")
   private Organisation organisation;
   ...
}
OneToOne macht hier aber wenig Sinn, da i.d.R. mehrere Organisationen gleichen Typs existieren können (sollten).
Mach lieber ein OneToMany bzw ManyToOne daraus
Code:
@Entity
class Organisation
{
   ...
   @ManyToOne
   @JoinColumn(name = "OrganisationType_id")
   private OrganisationType orgType;
   ...
}

@Entity
class OrganisationType
{
   ...
   @OneToMany(mappedBy="orgType")
   private Set<Organisation> orgList = new HashSet<Organisation>();
   ...
}

Gruß,
semi
 
Ok, alles klar. Hatte ich also doch noch einen Denkfehler.

Danke für den Tipp. 😀
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben