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と比較するには、nullまたは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 に答える