我想使用Hibernate的标准api来制定一个连接两个实体的特定查询.假设我有两个实体,Pet和Owner,拥有许多宠物,但关键是这种关联没有映射到Java注释或xml中.
使用hql,我可以通过在查询中指定连接来选择拥有名为'fido'的宠物的所有者(而不是将一组宠物添加到所有者类).
可以使用休眠标准完成相同的操作吗?如果是这样的话?
谢谢,J
这确实可以通过以下标准实现:
DetachedCriteria ownerCriteria = DetachedCriteria.forClass(Owner.class); ownerCriteria.setProjection(Property.forName("id")); ownerCriteria.add(Restrictions.eq("ownername", "bob")); Criteria criteria = getSession().createCriteria(Pet.class); criteria.add(Property.forName("ownerId").in(ownerCriteria));
更新:这实际上执行子查询而不是连接,但它允许您在两个没有定义休眠关系的实体上使用Criteria.
我的理解是,如果使用HQL执行此操作,则使用过滤器而不是内部联接创建笛卡尔联接.Criteria查询不支持这样做.