7

我可以在 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 [(]

谢谢!

4

2 回答 2

5

不,你不能。从文档中引用:

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

于 2012-04-17T07:12:23.923 回答
2

是的你可以!

您必须使用本机查询。这是一个例子:

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();
于 2012-11-23T08:58:09.603 回答