JPQL:来自多表达式选择的结果

时间:2013-06-23 09:25:59

标签: jpa jpql

这是我的JPQL查询:

SELECT p, 
   exists( select dp from DocumentPublication dp where dp.documentVersion = p) 
FROM 
   DocumentVersion p where document.id = :id

以下是获取结果的代码:

   Query query =   
     getEntityManager().createNamedQuery("DocumentVersion.findByDocumentId");

   query.setParameter("id", docsFilter.getProjectId());

   List<Object[]>  res;
   try
   {
       res = query.getResultList();
   }
   catch (NoResultException e)
   {
       return null;
   }
   // res only contains a list of DocumentVersion / No 'boolean'

我想检索结果列表但是当我在查询中执行“getResultList”时,我只看到select的第一部分(DocumentVersion列表),我没有看到我想要的布尔值得到。

我使用最新的hibernate版本之一作为pesistence提供程序。

谢谢。

1 个答案:

答案 0 :(得分:1)

正如SJuan所指出的,exists()不能在select表达式中使用。所以我用左连接更改了查询,效果很好。这是查询:

SELECT p, count(dp.id) 
FROM DocumentVersion p left join  p.documentPublications dp 
where p.document.id  = :id 
group by p.id

使用代码来检索结果:

 List<Object[]>  res;
   try
   {
       res = query.getResultList();
   }
   catch (NoResultException e)
   {
       return null;
   }

   List<DocumentVersion> documentVersions = new ArrayList<>();
   for(Object[] objects : res)
   {
      DocumentVersion documentVersion = (DocumentVersion) objects[0];
      documentVersion.setPublished( (Long) objects[1] >  0);
      documentVersions.add( documentVersion );
   }