Критерии гибернации слева кроме присоединиться


У меня нет идей, как это сделать, используя критерии Hibernate

SELECT * 
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL

Есть отображение гибернации, как

@Entity
class A{

    @Id
    @Column(name = "ID")
    private String ID;

    ... // fields
}

@Entity
class B{
    ... // fields

    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "A_ID", referencedColumnName = "ID")
    @Cascade(CascadeType.DETACH)
    private A a;

    ... // fields
}

Поэтому мне нужно получить список всех A, которые не упоминаются B

1 2

1 ответ:

Не пробовал раньше, но что-то вроде этого должно сработать:

select * from Table_A a
where a not in (
   select b.a from Table_B b )

Это, конечно, в HQL

Критерии могут выглядеть следующим образом:

DetachedCriteria subquery = DetachedCriteria.forClass(B.class)
.setProjection( Property.forName("a.ID") )
.add(Restrictions.isNotNull("a.ID"));

session.createCriteria(A.class)
.add ( Property.forName("ID").notIn(subquery) )
.list();