Postgresql 使用特定条件联接表

Postgresql 使用特定条件联接表,postgresql,hibernate,Postgresql,Hibernate,我有三张桌子: 在“contractYear”表中有一行或多行与其关联的“用户”,该表由“contract\u month”表中的行组成 我想获得当前合同年没有合同月的用户的结果集(即合同年.endDate

我有三张桌子: 在“contractYear”表中有一行或多行与其关联的“用户”,该表由“contract\u month”表中的行组成

我想获得当前合同年没有合同月的用户的结果集(即合同年.endDate<当前日期)

我提出了以下问题:

@Query("select distinct u "
        + " from User u "
        + " left join u.contractYears cy"
        + " on cy.endDate < now()"
        + " left join cy.contractMonths cm"
        + " where cm is null")
@Query(“选择不同的u”
+“来自用户u”
+“左派加入美国”
+“在cy.endDate
但它不起作用

我假设cy.endDate上的条件
”不正确


也许有人可以帮我在HQL中进行正确的查询?

如果您在join子句中需要额外的筛选器,您可以使用
关键字添加

select distinct u 
from User u 
left join u.contractYears cy
     with cy.endDate < now()
left join cy.contractMonths cm
where cm is null
选择不同的u
来自用户u
左派加入美国
使用cy.endDate

在HQL中,如果您在join子句中需要额外的筛选器,可以使用
关键字添加

select distinct u 
from User u 
left join u.contractYears cy
     with cy.endDate < now()
left join cy.contractMonths cm
where cm is null
选择不同的u
来自用户u
左派加入美国
使用cy.endDate

但它不起作用。。。你得到的结果是错误的还是错误的?@M Khalid Junaid,我得到的结果是错误的:我得到了所有拥有当前合同年的用户。我假设“where cm is null”条件被忽略。
user
是Postgres中的保留名称。最好不要将其用作(表或列)标识符。我很抱歉忘记了这一点。在实际情况中,我的表的名称有点不同。我只是举个例子,用了“user”这个名字,但它不起作用。。。你得到的结果是错误的还是错误的?@M Khalid Junaid,我得到的结果是错误的:我得到了所有拥有当前合同年的用户。我假设“where cm is null”条件被忽略。
user
是Postgres中的保留名称。最好不要将其用作(表或列)标识符。我很抱歉忘记了这一点。在实际情况中,我的表的名称有点不同。例如,我使用了“user”这个名称