class A {
Long id;
List<B> bList;
}class B {
Long id;
A a;
}A和B为一对多关系
我需要使用criteria查询A的实例中,bList.size() > count值的对象,想问问应该怎么实现?我是这样做的,但是报错了:
Criteria c = getSession().createCriteria(A.class);
c.createAlias("bList", "b");
c.add(Restrictions.gt("count(b)"), count); // 此处有误
List list = c.list();
报错:org.hibernate.QueryException: could not resolve property: count(b)总结起来,就是如何实现需要通过统计方法,如count(*),进行筛选的criteria查询?
Long id;
List<B> bList;
}class B {
Long id;
A a;
}A和B为一对多关系
我需要使用criteria查询A的实例中,bList.size() > count值的对象,想问问应该怎么实现?我是这样做的,但是报错了:
Criteria c = getSession().createCriteria(A.class);
c.createAlias("bList", "b");
c.add(Restrictions.gt("count(b)"), count); // 此处有误
List list = c.list();
报错:org.hibernate.QueryException: could not resolve property: count(b)总结起来,就是如何实现需要通过统计方法,如count(*),进行筛选的criteria查询?
自己写循环处理吧。
要不你试试这样:
Criteria c = getSession().createCriteria(A.class);
c.createAlias("bList", "b");
c.add(Restrictions.gt("b.size"), count); 看hibernate 能否将size这个属性映射成count;
呃,"b.size"貌似是去使用b.getSize();方法吧?b里边是没有这个属性的!!
呵呵,看来五等的高手都不知道的答案,估计这个问题是无解了,要是到下班还没有解决办法,这分就给你了吧
session.createCriteria(A.class)
.add(Restrictions.sqlRestriction("(select count(*) from b where b.a_id = {alias}.id) > ?", count, Hibernate.INTEGER))
.list();
这样应该可以的
谢谢您的提示!!!我使用跟你类似的方法把问题解决了~:)
还有谢谢longtenggdf,觉得你人挺好,级别这么高还这么谦虚,真不容易!