Hibernate Criteria Left Excluding JOIN

萝らか妹 提交于 2019-12-12 09:47:52

问题


I have no ideas how to do it using Hibernate Criteria

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

there is Hibernate mapping like

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

So I need to get list of all A which are not referred by B


回答1:


Not tried it before, but something like this should work:

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

This is of course in HQL

Criteria might look like this:

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


来源:https://stackoverflow.com/questions/20611423/hibernate-criteria-left-excluding-join

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!