休眠条件:在没有映射关联的情况下联接表

2022-08-31 13:10:16

我想使用Hibernate的条件api来制定一个连接两个实体的特定查询。假设我有两个实体,宠物和主人,主人有很多宠物,但至关重要的是,这种关联没有映射到Java注释或xml中。

使用 hql,我可以通过在查询中指定联接来选择拥有名为“fido”的宠物的主人(而不是将一组宠物添加到所有者类中)。

使用休眠条件也可以做同样的事情吗?如果是这样,如何?

谢谢,J


答案 1

这确实是可能的,通过标准:

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

更新:这实际上执行子查询而不是联接,但它允许您对未定义休眠关系的两个实体使用条件。


答案 2

我的理解是,如果您使用 HQL 执行此操作,则使用筛选器创建笛卡尔连接,而不是内部连接。条件查询不支持执行此操作。


推荐