HQL与3个表的连接和where条件

时间:2014-05-31 10:47:29

标签: mysql sql hibernate hql

我们有一个生成HQL的报告,其中两个表之间的连接正常工作。但随着数据库设计的改变,我们现在需要对3个表做同样的事情。但我没有得到预期的结果。

之前,所有用户在系统中都只有一个角色,而该角色是用户表的一部分。在这种情况下,以下HQL工作

<![CDATA[SELECT new com.test.reportsmodel.agentReport(u, 
            COUNT( t.transactionId ), SUM(CASE 
            WHEN  t.status =  'CREATED' THEN 1 
            WHEN  t.status =  'PAID' THEN 1 
            WHEN  t.status =  'DELIVERED' THEN 1 
            ELSE 0 END )) 
            FROM User AS u
            LEFT JOIN u.transactionsForAgent t WITH  
            (t.invoiceDate BETWEEN :startDate AND :endDate)
            WHERE u.role = 'EXTERNALAGENT'
            GROUP BY u.userId]]>    

现在,db设计已更改,允许用户在系统中拥有多个角色。因此,创建了useraccess表,其中包含userId和Role。为了解决这一变化,上述HQL已更新为

 <![CDATA[SELECT new com.test.reportsmodel.agentReport(u, 
        COUNT( t.transactionId ), SUM(CASE 
        WHEN t.status = 'CREATED' THEN 1 
        WHEN t.status = 'PAID' THEN 1 
        WHEN t.status = 'DELIVERED' THEN 1 
        ELSE 0 END )) 
        FROM User AS u
        LEFT JOIN u.transactionsForAgent t WITH 
        (t.invoiceDate BETWEEN :startDate AND :endDate)
        LEFT JOIN u.useraccesses a WITH 
        (a.role = 'EXTERNALAGENT')
        GROUP BY u.userId]]>

但是这个查询没有给出正确的结果。由于角色的变化,需要修改很多HQL。我想了解在HQL中合并此更改的最佳方法是什么。

0 个答案:

没有答案