2016-09-22 19 views
1

我有一個類Offer有多對多的關係department休眠/ JPA標準,查詢,如果一個對象在許多存在着許多關係

class Offer { 

    @ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE, CascadeType.REFRESH }) 
    @JoinTable(name = "Offer_Department", joinColumns = @JoinColumn(name = "offer_id"), inverseJoinColumns = @JoinColumn(name = "namecode_id")) 
    private Set<NamedCode> department; 

    ... 
} 

我如何使用JPA CriteriaBuilder搜索所有Offer包含特定的對象departmentNamedCode)。

這應該是一個較大查詢的一部分(見TODO部分):

CriteriaBuilder builder = getSession().getCriteriaBuilder(); 
CriteriaQuery<Offer> criteria = builder.createQuery(Offer.class); 
Root<Offer> root = criteria.from(Offer.class); 

List<Predicate> restrictions = new ArrayList<>(); 
if (fromDate != null && toDate != null) { 
    restrictions.add(builder.between(root.get("entryDate"), fromDate, toDate)); 
} 
if (department != null) { 
    // TODO check if the Offer object has assigned the passed department 
} 
// add more restrictions 

criteria.orderBy(builder.asc(root.get("entryDate"))); 
+1

可能加入到部門,然後對部門施加約束? –

回答

0

我想通了,我必須使用一個連接畢竟:

restrictions.add(builder.equal(root.join("department").get("id"), department.getId()));