休眠标准:没有映射关联的连接表

我想使用Hibernate的标准api来制定一个连接两个实体的特定查询。 假设我有两个实体,Pet和Owner拥有拥有许多宠物的所有者,但关键的是该关联未映射到Java注释或xml中。

通过hql,我可以通过在查询中指定连接(而不是将一组宠物添加到所有者类)来选择拥有称为'fido'的宠物的所有者。

同样可以使用休眠条件来完成吗? 如果是这样如何?

谢谢,J


我的理解是,如果您使用HQL执行此操作,则您将使用过滤器创建笛卡尔连接,而不是使用内部连接。 标准查询不支持这样做。


这确实符合标准:

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

更新 :这实际上是执行一个子查询而不是一个连接,但是它允许你在没有定义一个hibernate关系的两个实体上使用Criteria。


在NHibernate中,你可以使用定义为DetachedCriteria的子查询。 不知道它在Java中的工作原理是否相同,很可能它是相同的:

DetachedCriteria pets = DetachedCriteria.For<Pet>("pet")
  .SetProjection(Projections.Property("pet.ownername"))
  .Add(/* some filters */ );

session.CreateCriteria(typeof(Owner))
  .Add(Subqueries.PropertyIn("name", pets);

假定它使用所有者的名字加入。

链接地址: http://www.djcxy.com/p/37061.html

上一篇: Hibernate criteria: Joining table without a mapped association

下一篇: Hibernate JPA Parent