JPQL WHERE != Objekt

y0dA

Top Contributor
Hi!

Ist folgendes möglich bzw wie schreibt man das korrekt:

Java:
SELECT o FROM Objekt o WHERE o <> :neuesObjekt
neuesObjekt ist vom Typ Objekt und ich möchte alle Objekte laden die ungleich "neuesObjekt" sind.
Geht das irgendwie so (anscheinend nicht, weil ich bekomme eine Exception) oder muss ich mit einem Feld prüfen?
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
Das wäre imho das schlechteste was man machen kann...

Um equals zu nutzen braucht man Objekte, da reicht keine SQL Query, d.h. es müsste jede Entity instanziiert werden um dann equals darauf aufzurufen.. :autsch:

Solche Abfragen sind tunlichst zu vermeiden imho

Was willst du denn eigentlich machen?
 

y0dA

Top Contributor
steht ja da:
neuesObjekt ist vom Typ Objekt und ich möchte alle Objekte laden die ungleich "neuesObjekt" sind.
Also sollte ich mit irgendeinem feld prüfen:
Java:
SELECT o FROM Objekt o WHERE o.id <> :neueId
 
Zuletzt bearbeitet:
M

maki

Gast
Du musst schon genauer werden....

Auf ungleiche ID zu prüfen ist sinnfrei, da diese immer ungleich sein müssen per Definition, was genau ist denn neuesObjekt?
Ein transientes Objekt? Irgendein anderes Objekt?

Deswegen die Frage, was du eigentlich machen möchtest...

Aber ja, in den where clauseln vergleicht man am besten Attribute...
 

y0dA

Top Contributor
auf ungleiche IDS zu prüfen ist nicht sinnfrei, das sind nämlich keine Primarykeys sondern Fremdschlüssel und in dieser Tabelle können selbige mehrmals auftreten. Warum sollte man nur mit Attribute prüfen? Dachte wenn ich wb.person <> :neuePerson prüfe dass im Hintergrund eh der Primärschlüssel für den Vergleich herangezogen wird?

Java:
SELECT wb FROM WBTabelle wb WHERE wb.person <> :neuePerson
Also so klappt das Statement nun und sowohl wb.person als auch neuePerson sind ja instanziert (im früheren Verlauf aus der DB geladen worden) sonst würde ich das ja gar nicht versuchen wollen - warum sollte das nun schlecht sein? finde dies schöner als von "neuePerson" nur die ID durchzureichen und jene zu prüfen. Ausserdem mache ich hier kein nativ SQL sondern setze das Statement so zusammen:

Java:
Query query = getEntityManager().createQuery(sb.toString());
 
Zuletzt bearbeitet:
M

maki

Gast
Also so klappt das Statement nun und sowohl wb.person als auch neuePerson sind ja instanziert (im früheren Verlauf aus der DB geladen worden) sonst würde ich das ja gar nicht versuchen wollen - warum sollte das nun schlecht sein?
Ja, aber wenn man mal zufällig nciht die ganze Tabelle im Speicher hat werden das viele sinnlose SQL Statements, da kann dann nciht mehr viel optimiert werden.

finde dies schöner als von "neuePerson" nur die ID durchzureichen und jene zu prüfen.
Warum auf id prüfen sinnfrei hatte ich schon erklärt, es darf gar keine 2 Entitäten mit derselben geben.

Nahctrag:
auf ungleiche IDS zu prüfen ist nicht sinnfrei, das sind nämlich keine Primarykeys sondern Fremdschlüssel und in dieser Tabelle können selbige mehrmals auftreten.
Wieso sagst du dass denn nicht gleich?

Hast immer noch nciht gesagt was du eigentlich vorhast...
 

mvitz

Top Contributor
Es wäre trotzdem evtl. sinnvoller du erläuterst uns, was du genau machen möchtest. Es gibt nämlich wie von maki schon angedeutet evtl. einen besseren/sinnvolleren Weg das zu tun.
 

y0dA

Top Contributor
Also nochmal..

Ich habe eine Tabelle Waffenbesitz, selbige hat folgende Felder:
ID (PK), Waffe(FK), Person(FK), gueltigVon, gueltigBis

Ich möchte nun für eine Liste alle Waffenbesitze ausgeben welche nicht von der eingeloggten Person sind und die noch gueltig sind, sprich gueltigBis nicht gesetzt wurde.

Deshalb:
Java:
SELECT wb FROM Waffenbesitz wb WHERE wb.gueltigBis IS NULL AND wb.person <> :neuePerson
 

y0dA

Top Contributor
Habe es nun so umgesetzt:

Java:
SELECT wb FROM Waffenbesitz wb WHERE wb.gueltigBis IS NULL AND wb.person.id <> :neuePersonId
 

andiv

Bekanntes Mitglied
Wie wärs du benennst einfach deine Variable "neuePersonId" in "personId" um? Sonst hast du diesen Widerspruch, dass eine neu erstellte Id normalerweise noch nirgendwo verwendet wird. Davon abgesehen kann ich jetzt auch nicht sehen, was an deinem Vorgehen schlecht sein sollte.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JPQL- Query über mehrere Tabellen Datenbankprogrammierung 7
R JPQL und Navigation durch Collection Datenbankprogrammierung 1
M JPQL - Join Verkettung Datenbankprogrammierung 8
M Hibernate JPQL SELECT optional? Datenbankprogrammierung 2
A Jpql - order by sum ??? Datenbankprogrammierung 13
T JPQL Query für eine Tabellenansicht Datenbankprogrammierung 2
S Alle Kunden mit ihren Adressen mit JPQL ausgeben Datenbankprogrammierung 2
G JPQL L*KE / JPA Query Language Datenbankprogrammierung 9
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
J Mehrere WHERE Werte benutzen Datenbankprogrammierung 2
B JPA -> Dynamische WHERE Clause / SQL Injection möglich? Datenbankprogrammierung 11
J Hibernate One-To-One mit Where Klausel Datenbankprogrammierung 6
D Fälle bei WHERE unterscheiden Datenbankprogrammierung 5
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
A WHERE datetime < (util.Date | sql.Date | sql.Timestamp | dateString) Datenbankprogrammierung 2
M Variable in SQL SELECT * FROM ... WHERE mithilfe von PreparedStatement benutzen? Datenbankprogrammierung 28
R Derby/JavaDB Select Statement Where bedingung will nicht ganz! Datenbankprogrammierung 4
B HSQLDB Probleme mit Select...Where Abfrage Datenbankprogrammierung 16
N Prepared Statement mit unbekannter Anzahl von Where-Clauses Datenbankprogrammierung 30
C MySQL Abfrage mit flexibler WHERE bedingung Datenbankprogrammierung 10
K Unkown Column in where clausel Datenbankprogrammierung 2
J where Abfrage auf ein mysql date feld Datenbankprogrammierung 5
M Select * from mydaten where ... Datenbankprogrammierung 4
M Mysql Delete ohne Where Klausel untersagen Datenbankprogrammierung 8
M SQL-Abfrage mit where-Bedingung Datenbankprogrammierung 2
W Where-ähnliche abfrage in objektorientierter Datenbank Datenbankprogrammierung 5
G Frage zu SQL "WHERE IN (1, 2, 3. , N)" Datenbankprogrammierung 8
S Platzhalter in WHERE Klausel Datenbankprogrammierung 16
tom.j85 Objekt in OneToOne Beziehung über http request anzeigen lassen Datenbankprogrammierung 3
C Objekte aus DB in Strings umwandeln also von List<Objekt> in String Datenbankprogrammierung 6
S Mit 2 Queries ein Objekt erstellen Datenbankprogrammierung 6
I SQLite Objekt speichern einer Serialisierter Klasse Datenbankprogrammierung 1
P MySQL Historie für ein Objekt anlegen Datenbankprogrammierung 5
H JDBCODBC - Connection-Objekt Datenbankprogrammierung 3
N Java-Objekt dynamisch aus Datenbanktabelle erzeugen? Datenbankprogrammierung 4
W MySQL-Connection-Objekt übergeben Datenbankprogrammierung 2
G MySQL Zugriff auf Datenbank Objekt Datenbankprogrammierung 19
M JPA-Query - nicht das komplette Objekt Datenbankprogrammierung 4
J Derby/JavaDB NullPointerException bei VORHANDENEM EntityManager-Objekt!!! Datenbankprogrammierung 3
kirchrath Hibernate Join - angejointes Objekt wählen Datenbankprogrammierung 2
P MySQL Objekt aus BLOB auslesen Datenbankprogrammierung 3
S JPA: Objekt in Tabelle mit Composite Keys mappen (Embeddable Annotation) Datenbankprogrammierung 2
J Datenbank: Record-Objekt Datenbankprogrammierung 2
M \t in List-Objekt Datenbankprogrammierung 5
S Java objekt in MYSQL auslesen Datenbankprogrammierung 32
M Java Objekt in Datenbank schreiben :( Datenbankprogrammierung 8
G objekt zurück setzen Datenbankprogrammierung 2
sparrow Objekt mit lazy-verbindung komplettieren Datenbankprogrammierung 13
A Fehlermeldung "Objekt bereits geschlossen" Datenbankprogrammierung 3
A JDBC-Fehler "Objekt bereits geschlossen" Datenbankprogrammierung 4
Y Hibernate - 1:1 Beziehung liefert leeres Objekt Datenbankprogrammierung 19
S Hibernate - Ein Referenziertes Objekt mit Sprichern Datenbankprogrammierung 5
P [Hibernate] Objekt laden, Id ändern und speichern? Datenbankprogrammierung 2
R Hibernate speichert nur das Basis-Objekt Datenbankprogrammierung 4
M Objekt in Datenbank speichern Datenbankprogrammierung 2
J Wie kann ich in ein OLE-Objekt reinschreiben ? Datenbankprogrammierung 2
K relationale vs. objekt-orientierte Datenbank Datenbankprogrammierung 4
L Objekt in die DB speichern und die Id zurückgeben Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben