2013-12-16 4 views
2

У меня нет идеи, как сделать это с помощью Hibernate CriteriaHibernate Критерии Оставшись Без учета РЕГИСТРИРУЙТЕСЬ

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

есть отображение Hibernate как

@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 
} 

Так что мне нужно, чтобы получить список всех А, которые не являются отнесено B

ответ

1

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

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

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

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

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(); 
+0

только одна вещь. DetachedCriteria subquery = DetachedCriteria.forClass (B.class) .setProjection (Свойство.forName ("a.ID")) .add (Restrictions.isNotNull ("a.ID")); –

+0

Действительно :), обновит мой ответ –

Смежные вопросы