2013-06-24 75 views
1
Employee (table) 
id - int 
ctd_id - int 
message - char 

SELECT a.* 
FROM Employee a left outer join 
(select * from Employee where message = 23) b 
on a.ctd_id = b.ctd_id 
where a.message = 22 and b.id is null; 

這就是我想JPA 2個+標準API

CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 

CriteriaQuery<Employee> criteria = cb.createQuery(Employee.class); 
Root<Employee> emp = criteria.from(Employee.class); 
CriteriaQuery<Employee> sq = c.select(emp); 

Subquery<Employee> sq2 = criteria.subquery(Employee.class); 
Root<Employee> emp2 = sq2.from(Employee.class); 
Join<Employee,Employee> sqEmp = emp2.join("ctd_id", JoinType.LEFT); 
sq.select(sqemp).where(cb.equal(emp2.get("message"), cb.parameter(String.class, "23"))); 

sq.where(cb.in(path).value(sq2)); 
TypedQuery<Employee> q = em.createQuery(criteria); 
List<Employee> employeess = q.getResultList() 

但是,我不能夠以明白我應該如何申請使用where子句在子查詢的聯接。

請大家幫忙。

+2

到目前爲止你做了什麼?什麼是你的問題?您應該閱讀標準教程,如[動態,JPA 2.0中的類型安全查詢](http://www.ibm.com/developerworks/java/library/j-typesafejpa/),並返回除「請做我的工作「。如果您也閱讀[問]頁面,也許這將是一個好主意。 – andih

+1

編輯我的問題,幷包括我試過的片段。 –

回答

0

JPA不支持FROM子句中的子查詢。

要麼爲您的查詢使用SQL,要麼重寫它在from子句中沒有子查詢,它看起來不像您需要它。