这是我的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提供程序。
谢谢。
答案 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 );
}