Hibernate Criteria过滤器实体,其中ManyToMany关系包含多个对象

时间:2015-01-12 12:27:47

标签: java spring hibernate criteria

我需要有关Hibernate Criteria API的帮助。

我有一个Job类,其中包含ManyToMany关系中的Skill列表。

我需要根据作为参数给出的技能列表选择作业。

我已尝试使用Restriction.in("skill.id",ids),但这给了我错误的列表。如果我在搜索表单中选择了2个技能,我想要包含它们的工作,所以我需要以某种方式实现AND条款。

我尝试过Conjunction:

    Conjunction and = Restrictions.conjunction();   
    for(Skill skill:job.getSkills()){
            and.add(Restrictions.eq("skill.id",skill.getId()));
}

而且:

Criteria crit = criteria.createCriteria("skills",JoinType.LEFT_OUTER_JOIN);
                 for(Skill skill:job.getSkills()){
                     crit.add(Restrictions.eq("id", skill.getId()));
                 }

但它为技能创建了相同的别名,但它没有给我任何结果。 sql是and (skill1_.ID=? and skill1_.ID=?)

任何人都可以帮我这个吗?谢谢

更新

HQL查询将如下:

select a from Job a where exists (select skill1.id from Skill skill1 join skill1.jobs r where r.id=a.id and skill1.id=1) and exists (select skill2.id from Skill skill2 join skill2.jobs r where r.id=a.id and skill2.id=4)

我需要基于此的标准。

1 个答案:

答案 0 :(得分:1)

for(Skill skill:job.getSkills()){
                    DetachedCriteria subquery = DetachedCriteria.forClass(Skill.class,"skill");
                    subquery.add(Restrictions.eq("id",skill.getId()));
                    subquery.setProjection(Projections.property("id"));
                    subquery.createAlias("jobs", "job");
                    subquery.add(Restrictions.eqProperty("job.id", "Job.id"));
                    criteria.add(Subqueries.exists(subquery));  
                }

我设法解决了它。现在它完美无缺。