# Hibernate: OneToOne funktioniert nicht



## kf (15. Jun 2008)

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


```
@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.


----------



## Guest (15. Jun 2008)

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.


----------



## Guest (15. Jun 2008)

```
@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
	
	
	
	





```
@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


----------



## kf (15. Jun 2008)

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

Danke für den Tipp.


----------

