如何查询实体并将计数汇总到值对象上

时间:2019-06-04 14:29:33

标签: java sql hibernate jpa count

我正在尝试在JPA中创建一个查询,该查询将获取一个ID并在给定ID的多个列上找到计数。

例如,我有一份工作,此资源可以添加属性。我需要找到每个属性的计数,并映射到给定作业ID的新VO。

场景。

Job A has
    1 skillsType assigned

Job B has   
    2 skillsType assigned 

我的数据库结构保存jobIdskillTypeskillTypeId。照原样,这将为我提供作业B的ID的2个值,但是我需要将其设置为一行,并按给定类型给出技能类型的计数。

我试图在存储库上创建一个VO以将值映射到它,但是它不起作用。

我的VO具有以下值:jobIdsoftSkillsCounttechnicalSkillsCount

例如,作业B为 jobBIdValue,1、1而不是 jobBIdValue,softSkill,skillIdSoft jobBIdValue,technicalSkill,skillIdTechnical

到目前为止,我的代码是     NamedQuery = select new packagename.myJobViewVO(jobId, countOfSoftSkills,countOfTechnicalSkils) from JobView where jobId = 123

1 个答案:

答案 0 :(得分:1)

可能不是最好的解决方案,但是下面的查询可以解决问题

select new packagename.myJobViewVO(jobId,
 sum(case when skillType = 'soft' then 1 else 0 end ) as countOfSoftSkills,
 sum(case when skillType = 'hard' then 1 else 0 end ) as countOfTechnicalSkils
) from JobView where jobId = 123 group by jobId