![](/img/trans.png)
[英]JPA CriteriaBuilder left outer join for table with no relations?
[英]JPA CriteriaBuilder with junction table
下面的sql表達式如何使用CriteriaBuilder表示?
select * from Ref where prac_id = (select prac_id from loc l join staff_loc sl where sl.loc = l.id and sl.pracstaff_id = 123)
模型類
@Entity
public class Ref {
private Long id;
private Prac prac;
}
@Entity
public class Loc {
Long id;
@ManyToOne
Prac prac;
@ManyToMany
Set<PracStaff> pracStaff;
}
@Entity
public class Prac {
Long id;
@OneToMany
Set<Loc> locs;
}
@Entity
public class PracStaff {
Long id;
@ManyToMany
Set<Loc> locs;
}
我想要獲取的是使用CriteriaBuilder具有ID為123的PracStaff的所有Ref對象。
這是我必須進行全面測試的解決方案。 運用
Expression<Collection<PracStaff>>
返回收藏是我所缺少的
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Ref> criteriaQuery = criteriaBuilder.createQuery(Ref.class);
Root<Ref> from = criteriaQuery.from(Ref.class);
criteriaQuery.select(from);
Subquery<Prac> subquery = criteriaQuery.subquery(Prac.class);
Root<Loc> fromLoc = subquery.from(Loc.class);
Expression<Collection<PracStaff>> pracStaffInLoc = fromLoc.get("pracStaff");
subquery.where(criteriaBuilder.isMember({pracStaffObj}, pracStaffInLoc));
subquery.select(fromLoc.<Prac>get("prac"));
Path<Prac> specialist = from.get("{field in Ref class}");
Predicate p = criteriaBuilder.equal(specialist, subquery);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.