2016-04-25 14 views
0

Ich brauche eine hql/SQL-Abfrage mit Hibernate, aber ich weiß nicht genau, wie ich das in Hibernate erreichen kann. Backend-Datenbank ist SQL Server.Hibernate - Einfache Daten, aber komplexe SQL-Abfrage

Ich habe Transaktionstabelle mit Master-Status - Ausstehend, Kaution, Clear & Bounce.

Transaktionen - 1 Tabelle

Seq Receipt ID  Status 
1  1234   Pending 
2  2345   Deposited 
3  3456   Cleared 
4  4567   Bounced 

Zunächst werden die Datensätze sind in Pending. Die Verschiebung der Aufzeichnungen ist from Pending to Deposit und dann from Deposit to either Cleared or Bounced. es fügt Daten in einer anderen Tabelle entweder Cleared oder Bounced Je nach Statusänderung - Table 2

Aktuelle HQL-Abfrage, die einfach funktioniert gut die Daten von Table 1 liest und in Table 2 für bestimmten Eingang ID für den gleichen Status suchen. So etwas wie unten

Select receiptID from Table1 where table1.status in ('Bounced','Cleared') 
and not exists (select table2.receiptID from Table2 where 
table1.receiptID = table2.receiptID and table2.status in ('Cleared','Bounced')) 

Das funktioniert so weit gut, wie an jedem Punkt der Zeit wird es ein Rekord von beiden Cleared or Bounced in Tabelle 2.

New Change

Nun benötigt die Änderung ist die Aufzeichnung für Deposit auch in Table2 einzugeben. Also, wenn sich der Status von Pending to Deposit ändert, muss ich Daten in Table2 eingeben.

Nun, natürlich, nur durch Hinzufügen des Status als Deposit in oben genannten Abfrage wird nicht funktionieren. Es funktioniert gut für Deposit, aber wenn der Status von Deposit to Cleared/Bounced ändert, dann wird das System vorhandenen Datensatz in Table2 (Unterabfrage) für Deposit finden daher wird es keinen neuen Datensatz für Cleared or Bounced eingeben. :(

Ich glaube, ich kann dies tun mit Union, aber nicht sicher, wie ich es in den Ruhezustand (HQL) ohne komplexe Abfrage erreichen.

Hilfe plz !!!

Antwort

0

Nach viel von a denken, ja ist in der Lage, eine Lösung zu finden. ich andere existiert Bedingung hinzufügen muß nur nicht spezifisch für Hinterlegung von Tabelle 1 und löschen von Table2.

Neue Abfrage sieht aus wie

Select receiptID from Table1 where table1.status in ('Deposit','Bounced','Cleared') 
     and not exists (select table2.receiptID from Table2 
          where table1.receiptID = table2.receiptID 
          and table2.status in ('Cleared','Bounced') 
          and table1.status = table2.status) 
     and not exists (select table2.receiptID from Table2 
          where table1.receiptID = table2.receiptID 
          and table1.status in ('Deposit' 
          and table2.status in ('Cleared')) 
Verwandte Themen