【发布时间】:2012-09-06 21:57:12
【问题描述】:
我需要所有名字不同的人 null:
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<>?
但我没有结果!实际上,仅使用投影或仅使用标准列表查询可以正常工作,但同时使用两者都没有结果。
我错过了什么?
谢谢
【问题讨论】:
-
看起来不错。是不是手动执行了生成的sql,看看结果是不是真的回来了?
-
@jelies:你的回答是正确的。你应该取消删除它。
-
感谢@JBNizet!但是一旦发布,我认为这与问题无关,因为生成的关于 OP 问题的查询似乎很好。
-
查询没问题,但是在 SQL 中,就像在 HQL 中一样,将某些内容与 null 进行比较总是会导致 false。要与 null 进行比较,必须始终使用
is null或is not null。 -
@JBNizet 你是绝对正确的。我已经更新了我的答案。
标签: hibernate criteria projection hibernate-criteria