我们有一个生成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中合并此更改的最佳方法是什么。