0

这是我的 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”时,我只看到选择的第一部分(DocumentVersion 列表),看不到我想要的布尔值。

我正在使用最新的休眠版本之一作为持久性提供程序。

谢谢你。

4

1 回答 1

1

正如 SJuan 指出的那样,exist() 不能在 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 );
   }
于 2013-06-23T18:10:22.627 回答