我需要使用Hibernate进行hql / sql查询,但我不确切知道如何在Hibernate中实现这一点。后端数据库是SQL Server。
我有主要状态的交易表 - 待定,存款,清除&反弹。
交易 - 表1
Seq Receipt ID Status
1 1234 Pending
2 2345 Deposited
3 3456 Cleared
4 4567 Bounced
最初记录在Pending
。记录的移动是from Pending to Deposit
,然后是from Deposit to either Cleared or Bounced
。根据对Cleared
或Bounced
的状态更改,它会在另一个表格中插入数据 - Table 2
当前正常工作的hql查询只是从Table 1
读取数据,并在Table 2
中查找特定收据ID的相同状态。像下面的东西
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'))
到目前为止效果不错,因为在任何时候,表2中都会有Cleared or Bounced
的1条记录。
新变化
现在所需的更改是在Deposit
中输入Table2
的记录。因此,当状态从Pending to Deposit
更改时,我需要在Table2
中输入数据。
现在很明显,只需在上面的查询中添加状态Deposit
即可。因为它适用于Deposit
,但当状态从Deposit to Cleared/Bounced
更改时,系统会在Table2
(子查询)中找到Deposit
的现有记录,因此它赢了& #39;输入Cleared or Bounced
的任何新记录。 :(
我想我可以用union来做到这一点,但不知道如何在没有任何复杂查询的情况下在Hibernate(HQL)中实现它。
帮助PLZ !!!
答案 0 :(得分:0)
经过多次思考,是的,我能够找到解决方案。我只需要添加另一个不存在特定于表1的存款和表2的清除的存在条件。
新查询看起来像
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') )