0

休止状態で射影を使用して次のSQLを書きたい

SELECT id, name, MAX(ver)
  FROM bizterm
 WHERE name ILIKE '%AB%'
 GROUP BY name, id  order by name asc

私は次のコードを書いています

Session session=sessionFactory.getCurrentSession();
            Criteria criteria=session.createCriteria(BizTerm.class);
            criteria.add(Restrictions.ilike("name", searchString,MatchMode.ANYWHERE));
            criteria.addOrder(Order.asc("name"));
            ProjectionList projList=Projections.projectionList();
            projList.add(Projections.max("ver"));
            projList.add(Projections.groupProperty("id"));
            projList.add(Projections.groupProperty("name"));
            criteria.setProjection(projList);

テーブルの id,ver は PKEY です。このクエリは正常に実行されていますが、結果として、ver、id、name の 3 つの列のみの値を取得しています。これはオブジェクトとしても、BizTerm テーブルの status、level のような他の列があります。これらの値は結果セットに返されません。 . プロジェクションを使用してそれらを取得するにはどうすればよいですか? 試しprojList.add(Projections.property("status"));ましたが、うまくいきません。このクエリを実行したい

SELECT id, name,status,level MAX(ver)
  FROM bizterm
 WHERE name ILIKE '%AB%'
 GROUP BY name, id  order by name asc using projection in hibernate
4

1 に答える 1

1

これが好きでした..今はエラーなしで動作しています

Criteria criteria=session.createCriteria(BizTerm.class);
            criteria.add(Restrictions.ilike("bizTermName", searchString,MatchMode.ANYWHERE));
            criteria.addOrder(Order.asc("bizTermName"));
            ProjectionList projList=Projections.projectionList();
            projList.add(Projections.max("bizTermversion"));
            projList.add(Projections.groupProperty("bizTermId"));
            projList.add(Projections.groupProperty("bizTermName"));
            projList.add(Projections.max("status"));
            projList.add(Projections.max("levels"));
            projList.add(Projections.max("createDate"));
            projList.add(Projections.max("modifyDate"));

注: status、levels、createDate、modifyDate の最大数は必要ありませんが、max 関数内にそれらを記述していない場合、次のエラーが発生します。

[Error Code: 0, SQL State: 42803]  : column "levels" must appear in the GROUP BY clause or be used in an aggregate function

max関数を使用すると、すべてがうまくいくようです

于 2012-05-22T10:30:01.217 に答える