我有一个 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 只能选择投影或根实体。不是一些加入的实体。因此,某些查询无法用 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 join 查询一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17701147/