【问题标题】:Hibernate Criteria + projection with no results休眠标准+没有结果的投影
【发布时间】: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 nullis not null
  • @JBNizet 你是绝对正确的。我已经更新了我的答案。

标签: hibernate criteria projection hibernate-criteria


【解决方案1】:

尝试:

conditions.add(Restrictions.isNotNull("name"));

生成的查询将是这样的:

Hibernate: select distinct this_.name as y0_ from Mrdb this_ where this_.name is not null

编辑:

正如@JBNizet问题的cmets所说:

(生成的)查询很好,但是在 SQL 中,就像在 HQL 中一样,比较 为空的东西总是会导致错误。要与 null 进行比较, 必须始终使用 is null 或 is not null。

【讨论】:

    【解决方案2】:

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

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

    Criteria criteria = getSession().createCriteria(entityClass);
    criteria.add(Restrictions.isNotNull("fieldName"));
    

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 2015-07-17
      • 1970-01-01
      • 2014-10-30
      • 2017-12-11
      • 2017-05-25
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      相关资源
      最近更新 更多