簡體   English   中英

左外使用Java加入JPA

[英]Left Outer join JPA using Java

我陷入一個問題,即我無法找出如何使用criteriasQuery在兩個表上生成左外部 聯接 我有兩個表A_1和A_2

@Entity()
@Table(name = "A_1")
public class A1 {
    private long id_1;
    private long name;
    private long city;
}

@Entity()
@Table(name = "A_2")
public class A2 {
    private long id_2;
    private long a_1_id_1;
    private long name;
}

我必須找出A_1表中存在但A_2表中不存在的所有條目。 A_1表中的id_1與a_1_id_1相同

為此,我正在嘗試查詢:

select * from A_1 LEFT OUTER JOIN A_2 ON A_1.id_1 = A_2.a_1_id_1 where A_2.a_1_id_1 is NULL

我從查詢中獲得期望的結果。 但是我無法找出如何將其更改為代碼,基本上這是外部連接的一部分 我已經嘗試了許多來自網絡的選項,但無法找到解決方案。

我的代碼是這樣的:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> query = cb.createTupleQuery();
Root<A_1> root1 = query.from_1(A_1.class);
Root<A_2> root2 = query.from(A_2.class);
List<Predicate> predicates = getPredicates(cb, root1, root1, request);

我無法決定如何使用它來獲得所需的結果。 提前致謝。

您可以嘗試這樣的事情-

final Root<A_1> a1 = criteriaQuery.from(A_1.class);
Join<A_1, A_2> join1 = a1.join("joinColumnName", JoinType.LEFT);

Predicate predicate = criteriaBuilder.equal(A_2.<String> get("YOUR_COULMN"), value;
criteria.add(predicate);
criteriaQuery.where(predicate);
criteriaQuery.distinct(true);

暫無
暫無

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

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