EJB - CMR in EJBQL

Status
Nicht offen für weitere Antworten.

bronks

Top Contributor
Hi!

Ich habe mir folgendes ganz einfach gehaltenes Datenmodell ausgedacht (zum vergrößern bitte auf das Bild klicken).



CMR funktioniert und ich kann vom LocalInterface hintraversen wohin ich will. Klappt prima. Jetzt hänge ich wieder beim EJBQL in Sachen drin, die ich mit den mir verfügbaren Dokumenten und auch Google nicht enträtseln kann.

In der Entity zartikel habe ich einen Finder mit folgendem QL angelegt:
Code:
SELECT OBJECT(o) 
FROM Zartikel o
where o.sparte.spartetext = 'Farben'
Funktioniert wunderbar. Es werden mir alle Artikel angezeigt, welche der Sparte 'Farbe' angehören.

In der Entity Auftragsposition wollte ich das gleiche Spiel mit diesem QL machen. Es sollen alle Auftragspositionen zurückgegeben werden, bei denen der Kunde 'Maier' heißt, aber leider klappt das nicht und wird mit folgender Meldung durch den SJSAS8.2 reklamiert:
Code:
Bean:   ZauftragpositionBean
Method: java.util.Collection findByKunde()
EJBQL:  SELECT OBJECT(o) 
FROM Zauftragposition o
where o.auftragsnummer.kunde = 'Maier'
Error:  line(3) column(9): JDO75317: Field 'auftragsnummer' of type 'java.lang.Integer' is not a single valued cmr-field.

CMR ist richtig eingestellt, da folgender Code funktioniert:
Code:
ZauftragpositionLocal position = (ZauftragpositionLocal) it.next();
position.getZauftragBean().getKunde();

Ich komme nicht dahinter warum der 'findByKunde()' in der Auftragsposition nicht funktioniert und die Meldung vom SJSAS sagt mir leider nicht viel. Was mache ich verkehrt bzw. wie macht man es richtig?

Danke

Bronks
 

bronks

Top Contributor
@KSG9|sebastian:
Vielen Dank! Beide Dokumente kenne ich schon. Leider sind diese zu oberflächlich und entsprechen 1:1 dem J2eeTut von Sun.

In dem Artikel auf www.onjava.com ist ein schönes Bildchen zum Model. Die QL sind nur so einfach gehalten, wie man selbst auch draufkommen könnte. Interessant wäre ein QL, welches alle Produkte ausgibt, welche an einen bestimmten Ort geliefert wurden (z.B.)

In meinem o.g. Beispiel könnte ich auch auch von der Zauftrag-Entity mit einem Finder auf die Positionen gehen. Das kompliziert die weitere Verarbeitung und ist nicht in jedem Fall optimal anwendbar.
 

Bleiglanz

Gesperrter Benutzer
Code:
FROM Zauftragposition o
where o.auftragsnummer.kunde = 'Maier' 

du meinst wohl

FROM Zauftragposition o
where o.zauftragBean.kunde = 'Maier'
je nachdem, auftragsnummer kannste nicht nehmen?
 

bronks

Top Contributor
Bleiglanz hat gesagt.:
Code:
Du meinst wohl

FROM Zauftragposition o
where o.zauftragBean.kunde = 'Maier'
Das habe ich auch schon erfolglos probiert. Wenn das Funktioniert:
Code:
SELECT OBJECT(o)
FROM Zartikel o
where o.sparte.spartetext = 'Farben'
Dann hätte ich gedacht, daß 'where o.auftragsnummer.kunde = 'Maier'' auch funktionieren könnte, weil ich über das Schlüsselfeld gehe.

Bleiglanz hat gesagt.:
je nachdem, auftragsnummer kannste nicht nehmen?
In dem Beispiel kann ich über die AuftragsEntity gehen und mir eine Collection mit den Positionen geben lassen. Es gibt aber Fälle, wegen denen ich mich durch mehrere Entities und Collections durchgraben müßte.

Hast Du ne Ahnung was der SJSAS mit "is not a single valued cmr-field" meint und wie man da gegenwirken muß?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B EJBQL vs. komplexe Abfrage Allgemeines EE 5

Ähnliche Java Themen


Oben