簡體   English   中英

休眠標准左邊排除JOIN

[英]Hibernate Criteria Left Excluding JOIN

我不知道如何使用Hibernate Criteria來做到這一點

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引用的A的列表

之前沒有嘗試過,但這樣的事情應該有效:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM