如何对多对多关系进行存在查询

时间:2018-01-08 14:07:37

标签: java sql database hibernate hql

我有这个问题:

SELECT * 
FROM   A a 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   AB m 
                   WHERE  m.a_id = a.id 
                          AND EXISTS (SELECT 1 
                                      FROM   B b 
                                      WHERE  m.b_id = b.id 
                                             AND b.TYPE = 'C')) 

我需要在Hql中写这个。

我已经在AEntityBEntity类中映射了多对多的关系,以便AEntitylinkedBsBEntitylinkedAs }

我希望这个查询的版本更简洁。

修改

问题是我们没有表AB的任何hibernate实体,因为它只是一个JoinTable。因此,请提供一种在不使用表AB的情况下编写此查询的方法。

1 个答案:

答案 0 :(得分:1)

试试这个:

您可以在entityA和entityB之间使用笛卡尔积,然后在中间表中检查这对夫妇是否不存在

SELECT a
FROM entityA a, entityB b
WHERE NOT EXISTS(
    SELECT 'couple'
    FROM ab m
    WHERE m.id = a.id AND m.id = b.id)