我需要有关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)
我需要基于此的标准。
答案 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));
}
我设法解决了它。现在它完美无缺。