休眠标准:没有映射关联的连接表
我想使用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