我需要名字为<>的所有不同的人空:
List<Criterion> conditions = new ArrayList<Criterion>();
conditions.add(Restrictions.ne("name", null));
Projection projection = Projections.distinct(Projections.property("name"));
List<People> result = dao.findByCriteria(conditions, projection);
其中:
public List<T> findByCriteria(List<Criterion> list, Projection projection) {
try {
Criteria criteria = getSession().createCriteria(entityClass);
if (list != null) {
for (int i = 0; i < list.size(); i++) {
criteria.add(list.get(i));
}
}
if (projection != null) {
criteria.setProjection(projection);
}
List result = criteria.list();
return result;
} catch (Exception e) {
// log
}
}
,生成的查询为:
Hibernate: select distinct this_.name as y0_ from Mrdb this_ where this_.name<>?
但我没有结果!实际上,仅使用投影或仅使用标准列表,查询工作正常,但使用两者都没有结果。
我错过了什么?
由于
答案 0 :(得分:1)
尝试:
conditions.add(Restrictions.isNotNull("name"));
生成的查询将是这样的:
Hibernate: select distinct this_.name as y0_ from Mrdb this_ where this_.name is not null
修改强>
正如@JBNizet所说的那样:
(生成的)查询很好,但在SQL中,就像在HQL中一样,进行比较 null的东西总是会导致错误。要与null比较, 必须始终使用null或不为null。
答案 1 :(得分:0)
为什么不在该字段中添加限制条件?
,例如,您实体中的fieldName
字段:
Criteria criteria = getSession().createCriteria(entityClass);
criteria.add(Restrictions.isNotNull("fieldName"));