2017-01-21 3 views
0

Wenn ich die Hibernate-Abfrage verwenden (wenn Sie SQL wissen noch nicht verlassen!): FROM Entity e WHERE 'USA' NOT IN e.addresses es gibt alle Einheiten, die EIN Adresse außerhalb der USA haben , aber ich möchte nur die Entitäten, die NONE ihrer Adressen in den USA (in diesem Beispiel) haben.HQL/SQL ‚nicht in‘ Klausel

Wie mache ich das in HQL (wahrscheinlich ähnliches Problem mit SQL nur etwas andere Syntax, wenn Sie es mir erklären könnten, wie es in SQL funktioniert Ich werde es wahrscheinlich auch nur nie verstanden WHERE 'Element' NOT IN (Array) in SQL).

Hinzugefügt: Bitte beachten Sie, dass e.addresses ein Array ist

+0

Ich habe nicht viel HQL getan, aber ich hoffe, meine Antwort für Sie nach einigen Manipulationen für HQL funktioniert (ich habe angenommen dass die PK für die Entity-Tabelle ist e –

+0

Könnten Sie Ihre 'showSQL' in Hibernate-Konfiguration auf True setzen und einfügen, wie sieht das generierte SQL aus? Ich habe keine Testumgebung zu überprüfen, aber ich glaube es sollte habe so gearbeitet, wie du es erwartet hast, und mein erster Versuch zu erraten, welche SQL deine Anfrage erzeugt hätte, gibt auch das richtige Ergebnis. – Deltharis

Antwort

1

Ich gehe davon aus, dass Sie eine Eins-zu viele Verbindungen zwischen Ihren Organisationen und Adressen haben. Was Sie tun müssen, ist zuerst Entitäten mit Adresse in den USA zu finden und dann die gleiche (mit NOT IN vielleicht?) Von der Gesamtzahl der Entitäten zu subtrahieren.

Wenn Sie mit der aktuellen Abfrage helfen möchten, können Sie Ihre Tabellenstruktur hier posten

FROM Entity e2 
WHERE e2.id NOT IN (e1.id FROM Entity e as e1 WHERE 'USA' IN e1.addresses) 
+1

Gute Lösung :) thnx! – Ben