具有受限关联的Hibernate Criteria查询
这里的用例是找到一些受限制的具有一定范围长度的风筝的男孩,然后可以检索属于这些男孩的范围内的所有风筝。
不要以为我对SQL或Hibernate有很多了解。
我想形成一个Hibernate Criteria查询,其中关联的集合已被限制。 例如,假设我有一个Boy类,它具有与Kites类的双向一对多关联。 我想得到一份风筝长度在一定范围内的男孩名单。
我可以通过HQL查询获得满足此目标的字段(但不是男孩):
select Boy.name from Boy
inner join Kite on Boy.id=Kite.boyId
where length >= 1;
然而,使用Criteria的这种尝试总是返回零的list.size()(即使Boy Huck有一系列长度为0.1-2.0的风筝):
Criteria crit = session.createCriteria(Boy.class);
crit.add(Restrictions.eq("name", "Huck"))
.createCriteria("kites")
.add(Restrictions.ge("length", new BigDecimal(1.0)));
List list = crit.list();
理想情况下,对于这个列表中的每个男孩(假设我的代码工作!),我希望boy.getKites()中的所有风筝满足长度限制。 这第二个目标可能是一厢情愿的想法。
我对Criteria尝试的问题的猜测是,连接不正确:我看到了这个ff,但不知道如何解决它。
Hibernate:
select
this_.id as id3_1_,
this_.name as name3_1_,
...
kites1_.id as id4_0_,
kites1_.boyId as boyid2_4_0_,
kites1_.length as length3_4_0_,
...
from
Boy this_
inner join
Kite kites1_
on this_.id=kites1_.id <--- Should be =boyid?
where
this_.name=?
and kites1_.length>=?
尝试改变
Criteria crit = session.createCriteria(Boy.class);
crit.add(Restrictions.eq("name", "Huck"))
.createAlias("kites", "k")
.add(Restrictions.ge("k.length", new BigDecimal(1.0)));
List list = crit.list();
或者在HQL中明确写入:
Query query = HibernateUtil.getSession().createQuery("SELECT b FROM Boy b INNER JOIN b.kites k WHERE b.name=:name AND k.length>=:length");
query.setString("name", "Huck");
query.setBigDecimal("length", BigDecimal.ONE);
如果它不起作用,那么在Boys-Kites映射中存在一个问题(hibernate beleive,两个表中的连接列都是“id”)。
感谢您的答案。 这实际上是一个两部分问题:为什么我的Criteria查询没有工作,以及如何获取受限关联的集合。 第一部分是通过修复我指出的连接错误和FoxyBOA鼓励我找到的。
第二个更有趣的问题,我在这里再次提出。
链接地址: http://www.djcxy.com/p/36973.html