# [Hallo] Frage zu Hibernate Mapping und Vererbung



## Frank__ (19. Okt 2007)

Hallo, 

ich hab derzeit ein (vielleicht triviales?) Problem und weiß gerade nicht wie man das am besten macht. Ich habe folgende Java Klassen.


            W*----------B
            |
     ____|____
    |       |      |
    X       Y      Z



Objekt *B* hat eine Liste von *W* Objekten

Die Klassen *X,Y,Z* erben von Klasse *W*


Wie mappe ich sowas ? Ganz grobe Hilfe wäre schon gut. Mich interessiert vor allem wie das/die Felder in der Klasse B aussehen, z.B.


class B {

   private List<W> w;
   // ??

}


sind in der Liste w nun Objekte vom Typ x,y,z oder halte ich diese alle separat in der Klasse B


ich bin derzeit ein bisschen verwirrt, bitte helfen :-/


----------



## Frank__ (19. Okt 2007)

Der Titel sollte lauten


"Frage zu Hibernate Mapping und Vererbung"


aber ich bekam ständig ein "Der Titel darf aus.... nicht.... sein"

sorry

_[Edit by Beni: Titel ersetzt]_


----------



## Frank__ (19. Okt 2007)

achso, vielleicth sollte ich das ein wenig korrekter formulieren. 

Also die Klasse B benötigt in jedem Falle sowohl die Objekte W, als auch X, Y und Z.

Objekt B baut eine Datenstruktur auf mit diesen 4 Objekten. Dabei holen sich die Objekte X, Y, Z bestimmte Werte von Objekt W.


----------



## Guest (19. Okt 2007)

Zwei Möglichkeiten. Jede Entity in eigener Tabelle oder alle in gleicher Tabelle mit Discriminator.


```
@Entity
public class B
{
   private List<W> w;
}
```
Variante 1
	
	
	
	





```
@MappedSuperclass
public abstract class W
{
}

@Entity
public class X extends W
{
}

@Entity
public class Y extends W
{
}

@Entity
public class Z extends W
{
}
```
Variante 2
	
	
	
	





```
@Entity
@Inheritance( strategy = InheritanceType.SINGLE_TABLE )
@DiscriminatorColumn( name = "CAT", discriminatorType = DiscriminatorType.CHAR, length=1 )
public abstract class W
{
}

@Entity
@DiscriminatorValue("X")
public class X extends W
{
}

@Entity
@DiscriminatorValue("Y")
public class Y extends W
{
}

@Entity
@DiscriminatorValue("Z")
public class Z extends W
{
}
```


----------

