Hibernate Criteria加入查询一对多

我有一个Cat类和一个Owner类.一只猫有一个主人,但拥有者可以拥有许多猫.我想查询的是“让所有拥有蓝眼睛猫的业主”.

class Cat{
Owner owner; //referenced from Owner.id
String eyeColor;
}

class Owner{
List<Cat> catList;
}

我尝试了一些代码,但我真的不知道该怎么办

Criteria criteria = getCurrentSession().createCriteria(cat.getClass(), "cat");
criteria.createAlias("cat.owner", "owner");    
criteria.add(Restrictions.eq("cat.eyeColor", "blue");
最佳答案
标准只能选择投影或根实体.不是一些加入的实体.因此,一些查询不可能用Criteria表达(除了更好的可读性和简洁性之外,这也是使用HQL的另一个好的理由).

所有这一切都不会丢失在这里,因为你的关联是双向的.所以你只需要等同于HQL查询

select distinct owner from Owner owner 
join owner.cats cat 
where cat.eyeColor = 'blue'

哪个是

Criteria c = session.createCriteria(Owner.class, "owner");
c.createAlias("owner.cats", "cat");
c.add(Restrictions.eq("cat.eyeColor", "blue");
c.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

转载注明原文:Hibernate Criteria加入查询一对多 - 代码日志