0

我需要所有姓名为 <> 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<>?

但我没有结果!事实上,仅使用投影或仅使用标准列表查询工作正常,但使用两者都没有结果。

我错过了什么?

谢谢

4

2 回答 2

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 进行比较总是会导致 false。要与 null 进行比较,必须始终使用 is null 或 is not null。

于 2012-09-21T12:59:35.683 回答
0

为什么不在标准中添加对该字段的限制?

例如,对于fieldName您实体中的字段:

Criteria criteria = getSession().createCriteria(entityClass);
criteria.add(Restrictions.isNotNull("fieldName"));
于 2014-01-30T11:07:06.847 回答