首页 文章

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

提问于
浏览
2

我需要有关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=?)

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

UPDATE:

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)

我需要基于此的Criteria .

1 回答

  • 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));  
                    }
    

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

相关问题