Критерии гибернации слева кроме присоединиться
У меня нет идей, как это сделать, используя критерии 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 ответ:
Не пробовал раньше, но что-то вроде этого должно сработать:
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();