如何从中间表中选择hibernate.query

时间:2015-07-22 14:30:17

标签: java hibernate hibernate-criteria

我有三个表JobJobSeekerJob_applications这是中间表。 JobJobSeeker之间的关系是n到n。如何编写一个hibernate查询或条件来选择一个包含Job.idJob.applicantsCount的列表(作业),该列表计算应用于该作业的JobSeeker个。{/ p>

Job实体:

    @ManyToMany
    @JoinTable(name="JOB_APPLICATIONS",  
            joinColumns={@JoinColumn(name="id_job", referencedColumnName="id")},  
            inverseJoinColumns={@JoinColumn(name="id_job_seeker", referencedColumnName="id")})
    private List<JobSeeker> jobSeekers = new ArrayList<JobSeeker>();

    @Transient
    @Expose


    private Integer applicantsCount = 0;

    ...

JobSeeker实体:

    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="JOB_APPLICATIONS",  
        joinColumns={@JoinColumn(name="id_job_seeker", referencedColumnName="id")},  
        inverseJoinColumns={@JoinColumn(name="id_job", referencedColumnName="id")})
    @Fetch(FetchMode.SUBSELECT)
    private List<Job> jobs = new ArrayList<Job>();
    ....

在普通的SQL中,我写的是这样的:select id,(select count(*) from job_applications where id_job = id ) as applicantsCount from job

这可行但我需要在列表(作业)中使用hibernate.Query或hibernate.Criteria。有人可以帮我用hibernate编写这个查询吗?

解: manish评论解决了我的问题读了

1 个答案:

答案 0 :(得分:0)

它不是很清楚。您应该编写实体以提供更好的抽象。为什么你不能在List<JobApplications>课程中拥有Job所以你可以获得一个列表:

Criteria crit = s.createCriteria(Job.class);
List<Job> jobs =crit.getList();
for(Job j:jobs){
    //j.getId returns the Id of the Job.....and... 
    //j.getJobApplications.size() returns count for that particular job
}