2012-04-17 92 views
3

我可以在JPQL上做這樣的事嗎?JPQL加入嵌套SELECT

SELECT NEW com.MyDTO(p.a, p.b, q.c, q.d) 
FROM 
(SELECT r.* FROM MyDTO1 r) p 
LEFT OUTER JOIN 
(SELECT s.* FROM MyDTO2 s) q 
ON p.x = q.y 

或同樣的問題? (以上查詢混合了原生和JPQL,所以不要誤會)

我遇到了這部分的問題,我想。

FROM 
(SELECT r.* FROM MyDTO1 r) p 

當我試圖執行我得到這個錯誤。

Exception Description: Syntax error parsing the query [.....], unexpected token [(] 

謝謝!

回答

2

不,你不能。引用自the documentation

請注意,HQL子查詢只能出現在select或where子句中。

1

是的,你可以!您需要使用native queries。這裏是一個例子:

emf = Persistence.createEntityManagerFactory("TEST")  
EntityManager em = emf.createEntityManager(); 
String queryString = "SELECT ID FROM (SELECT * FROM ADDRESS WHERE ID < 0)"; 
Query query = em.createNativeQuery(queryString); 
List<BigDecimal> result = query.getResultList();