JPQL JOINS与嵌套的SELECT

时间:2012-04-17 05:22:48

标签: jpql openjpa

我可以在JPQL上做这样的事情吗?

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 

或类似? (上面的查询混合了native和JPQL,所以不要误解)

我觉得这个部分有问题。

FROM
(SELECT r.* FROM MyDTO1 r ) p

当我试图执行时,我收到了这个错误。

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

谢谢!

2 个答案:

答案 0 :(得分:4)

不,你不能。引自the documentation

  

请注意,HQL子查询只能在select或where中出现   条款。

答案 1 :(得分:2)

是的,你可以!

您必须使用 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();