EJBQL: Item aus einer Collection(ManyToOne) löschen

Millman

Mitglied
Ich suche gerade nach dem korrekten Delete-Statement, um bei einer ManyToOne-Beziehung eine Entity aus der Collection zu löschen.

Versucht habe ich es nach dem Schema:

"Delete s From Klasse k join k.schueler s Where s.name = Max", leider gibt er mir immer einen Syntax-Fehler beim join an
 
G

Gelöschtes Mitglied 5909

Gast
Kannst du direkt auf die Schüler Entity gehn?

Poste mal die Exception (StackTrace)
 

Millman

Mitglied
Kannst du direkt auf die Schüler Entity gehn?

Poste mal die Exception (StackTrace)

Der meckert wie gesagt immer wegen des Join, das darf in einem Delete-Statement nicht stehen.

Auf die Schüler Entity kann ich normalerweise schon gehen, wenn ich z.B. über ein Select-Statement eine Schüler-Entity, also z.B.

"Select s From Klasse k join k.schueler s Where s.name = Max" Das läuft.

Derzeit finde ich leider nichts dazu, wie ich aus einer Collection ein Element lösche, aber ich bin mir ziemlich sicher, dass das mit JPA 2.0 gehen sollte...

Hier noch eben zu den Entities:
Schueler:
Code:
Private int bewertung;
Private Klasse klassen;

Klasse:
Code:
Private long id;
Private collection<Schueler> schueler;
 

Millman

Mitglied
Sorry, aber das macht man so nicht und ein Delete mit einem Join geht schon mal garnicht. :)

Wie man es macht wird z.B. hier demonstriert:
Beispiel: Entity Relationships

Sorry aber da hilft dein Beispiel doch überhaupt nicht weiter. Dort wird lediglich erläutert, wie ich ein Item per JavaCode aus der Collection lösche, ich möchte das aber von der Datenbank über JPA 2.0 machen lassen, zwecks besserer Performance.
 
S

SlaterB

Gast
ob es nicht weiterhilft ist Interpretationssache bzw. höheres Wissen,
vielleicht war ja gerade der Fingerzeig, dass die Java-Variante die einzig mögliche ist,
kannst ja nebenher loggen, was daraus für mehrere normale SQL-Befehle werden

gut möglich dass man so komplexe Strukturen nicht in der HQL-Sprache verändern kann (wie würdest du ein Einfügen formulieren?),
ich selber habe auch noch nie in SQL oder HQL irgendein DELETE über joins gesehen,
aber das muss nix heißen
 

Millman

Mitglied
ob es nicht weiterhilft ist Interpretationssache bzw. höheres Wissen,
vielleicht war ja gerade der Fingerzeig, dass die Java-Variante die einzig mögliche ist,
kannst ja nebenher loggen, was daraus für mehrere normale SQL-Befehle werden

gut möglich dass man so komplexe Strukturen nicht in der HQL-Sprache verändern kann (wie würdest du ein Einfügen formulieren?),
ich selber habe auch noch nie in SQL oder HQL irgendein DELETE über joins gesehen,
aber das muss nix heißen

Hmm müsste man denn nicht im Endeffekt einfach eine Zeile aus der Beziehungstabelle löschen? Das ganze muss nicht über einen Join ablaufen, das war nur meine anfängliche Idee gewesen.

Nur überlege ich, ob ich das ganze nicht zur Not einfach mit einem klassischen SQL Statement hinbekommen könnte, denn die Methode mit dem Listendurchlauf wie in dem Beispiel von Bronks ist ja nicht gerade performant.

Insofern, hättet ihr vll das benötigte SQL Statement für mich? Oder ist die Methode mit dem Listendurchlauf derzeit wohl die einzige Möglichkeit?
 
S

SlaterB

Gast
wenn es eine Zwischentabelle gibt, na dann
> delete from zwischentabelle where id1 = .. and id2 = ..

normalerweise reicht für eine solche Collection eine Fremdschlüsselbeziehung, siehe das verlinkte Beispiel,
> update eineTabelle set fremdschlüssel = null

soll eigentlich nur die Verbindung oder auch eines der Elemente gelöscht werden? dann zusätzlich delete auf die entspreche Tabelle
 

Ähnliche Java Themen


Oben