# EJBQL vs. komplexe Abfrage



## bronks (24. Mrz 2006)

Hi!

Meine App läuft auf JBoss mit MySql. Für eine Liste bräuchte ich Daten welche aus mehreren Entities kommen. In EJBQL könnte man das Query schon zusammenstottern, aber irgendwie erscheint mir das unappetitlich und unproduktiv.

Ich habe in einer SessionBean einfach eine Connection geschnappt und ein SQL direkt auf die Datenbank ausgeführt. Die Sätze habe ich in Beans verpackt, in einer ArrayList serialisiert und weitergereicht. Direkt auf die Entity greife ich nur zu wenn Transaktionen und Isolation gefragt sind. Ist das eine saubere Vorgehensweise?  Macht Ihr das auch so?

Mal angenommen, daß mir der Finder einer Entity ein EJBQL ausführt, welches Daten aus mehreren Tabellen zurückgibt. Gegen was kann ich die Objekte der Collection casten bzw. wie komme ich an die Daten ran? Muß ich dafür eine extra entity bauen, welche die Felder der mehreren Tabellen enthält?

Danke

Bronks


----------



## Bleiglanz (24. Mrz 2006)

wenn du wirklich die Beans als Objekte brauchst (und nicht nur eine Spezialliste), dann würde ich mit EJBQL arbeiten.

Und: finder und Select lieferen dir gleich direkt eine Collection von Referenzen auf die HomeInterfaces, d.h. du musst nur noch casten und kannst dann sofort damit weiterarbeiten

geht leider nicht immer, die QL ist nicht so richtig mächtig

und: wenns um Performance oder Spezialabfragen geht, oder man die "EJB-Objekte" gar nicht braucht -> dann ist der Direkt-JDBC Zugriff IMHO schon ok


----------



## bronks (26. Mrz 2006)

Danke!


----------



## bronks (28. Mrz 2006)

Sorry, aber ich komm damit doch nicht weiter.

Nehmen wir mal folgende Entities als Beispiel:
*Artikel:*
Artikelnummer (Pri)
Sparte (FK N:1)
Gewicht

*Sparte:*
Sparte (Pri)
Spartenbezeichnung

*Lagerbestand:*
Lagernummer  (Pri)
Artikelnummer (Pri, FK N:1)
Lagerbestand

Ich will jetzt eine Collection mit folgenden Feldern haben: Artikelnummer, Gewicht, Spartenbezeichnung, Lagernummer, Lagerbestand

Wie muß das EJBQL aussehen?

Danke!

Bronks


----------



## Bleiglanz (29. Mrz 2006)

im allgemeinen (wenn CMR verwendet wird!!)

einfach eine Liste ALLER Artikel

dann über die Methoden navigieren

artikel.getSparte().getSpartenbezeichnung()

usw.

dazu musst du aber alle Relationen in CMR umsetzen, wenn das nicht der Fall ist mach lieber JDBC


----------



## bronks (30. Mrz 2006)

Vielen Dank! Hab mich damit die halbe Nacht beschäftigt und es funktioniert einwandfrei.


----------

