Hibernate Criteria +投影没有结果

时间:2012-09-13 18:33:06

标签: hibernate criteria projection hibernate-criteria

我需要名字为<>的所有不同的人空:

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<>?

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

我错过了什么?

由于

2 个答案:

答案 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"));