# EJB3 Multi-Table



## lordheady (15. Aug 2007)

Hi Leute,

ich hab den Auftrag bekommen in EJB3 ein Entity Bean zu schreiben, welches sich auf 2 Datenbank Tabellen bezieht, die in einer 1…n Beziehung stehen.

Frage ist das überhaupt möglich? (hab ein Artikel gelesen http://www.objects-at-work.de/pmwiki/EJBGlossar/M
  bei *Multi-table* steht, dass es möglich ist, mehr als nur "1…1" Beziehungen in einem Entity Bean herzustellen, 
  paradox ist nur das Codebeispiel, welches nur eine gewöhnliche 1…1 Beziehung zeigt)
Wenn es möglich ist … Wie mach ich das?(Codebeispiel wären sehr hilfreich) 
Alternativen -> würde sonst ein zweites Entity Bean schreiben…

Vielen Dank für Eure Antworten im Voraus!!


----------



## Guest (16. Aug 2007)

lordheady hat gesagt.:
			
		

> Frage ist das überhaupt möglich? (hab ein Artikel gelesen http://www.objects-at-work.de/pmwiki/EJBGlossar/M
> bei *Multi-table* steht, dass es möglich ist, mehr als nur "1…1" Beziehungen in einem Entity Bean herzustellen,
> paradox ist nur das Codebeispiel, welches nur eine gewöhnliche 1…1 Beziehung zeigt)


Ja, es ist möglich, sonst wäre das ganze EJB nur ein Witz. In dem Beispiel wird einfach nur gezeigt, wie man mehrere Tabellen zu einer logischen Entity-Bean zusammenfassen kann.


			
				lordheady hat gesagt.:
			
		

> Wenn es möglich ist … Wie mach ich das?(Codebeispiel wären sehr hilfreich)


Es gibt Annotations für alle Typen von Relationships. Siehe OneToMany, ManyToMany, OneToOne etc.


			
				lordheady hat gesagt.:
			
		

> Alternativen -> würde sonst ein zweites Entity Bean schreiben…


So ist es. Modeliere das ganze zunächst rein in Java, dann kommt der Rest mit Annotationen etc.

OneToMany-Beispiel
	
	
	
	





```
@Entity
class Auftrag
{
   ...

   @OneToMany( mappedBy = "auftrag" )
   private Set<Auftragsposition>;

   ...
}

@Entity
class Auftragsposition
{
   ...

   @ManyToOne
   private Auftrag auftrag;

   ...
}
```


----------



## kleiner_held (16. Aug 2007)

Multi-table Mapping bedeutet, dass die Attribute von *einem* Entity Bean in mehreren unterschiedlichen Tabellen liegen koennen.
Das geht natuerlich nur, wenn die Tabellen in der Datenbank eine 1 zu 0..1 Beziehung haben, ganz klassisch mit einem Fremdschluessel. 1 zu n oder n zu m kann man nicht in *einem* Entity Bean abbilden, dazu nimmt man dann *mehrere* Entity Beans und @OneToMany bzw @ManyToMany Annotations, das hat dann aber primaer nichts mehr mit Multi-table Mapping zu tun.

Der von dir zitierte Artikel sagt uebrigens nichts anderes aus.


----------



## Guest (16. Aug 2007)

kleiner_held hat gesagt.:
			
		

> Multi-table Mapping bedeutet, dass die Attribute von *einem* Entity Bean in mehreren unterschiedlichen Tabellen liegen koennen.
> Das geht natuerlich nur, wenn die Tabellen in der Datenbank eine 1 zu 0..1 Beziehung haben, ganz klassisch mit einem Fremdschluessel. 1 zu n oder n zu m kann man nicht in *einem* Entity Bean abbilden, dazu nimmt man dann *mehrere* Entity Beans und @OneToMany bzw @ManyToMany Annotations, das hat dann aber primaer nichts mehr mit Multi-table Mapping zu tun.
> 
> Der von dir zitierte Artikel sagt uebrigens nichts anderes aus.



doch, man kann eine 1:n beziehung von darunterliegenden dbtabellen in einer bean agregieren. wie du im beispiel ja auch siehts, haben kunde und anschrift eine 1:n beziehung.


----------



## kleiner_held (18. Aug 2007)

Nur die Grafik enthaelt eine 1 zu N Darstellung.
Aber die Grafik passt nicht zu dem Beispiel-Code (In der Grafik heisst die Tabelle ANSCHRIFT im Code ADRESSE).
Ausserdem, wie soll das denn funktionieren? Wenn wirklich in der Tabelle ADRESSE mehrere Einträge per Fremdschlüssel auf den gleichen Eintrag in der Kundentabelle verweisen, was sollte dann in Kunde.strasse stehen? Eine kommaseparierte Liste aller Einträge? Wohl eher nicht.


----------



## Guest (19. Aug 2007)

kleiner_held hat gesagt.:
			
		

> was sollte dann in Kunde.strasse stehen? Eine kommaseparierte Liste aller Einträge? Wohl eher nicht.



ich hab das bild nicht so genau angesehen, aber das geht m.m. schon. natürlich ist strasse dann keine kommaseparierte liste sondern eine echte list (e.g. Arraylist)  :lol:


----------

