1

デフォルトでは、hibernate で count を実行すると count(*) が生成されますが、デフォルトが count(1) になるように変更することはできますか? これを行うためにHQLを使用したくありません。つまり、使用するとき criteria.setProjection(Projections.rowCount());

4

2 に答える 2

1

クエリに GROUP BY がある場合は、theProjections クラスで sqlGroupProjection() メソッドを使用できます。これは 4 つの引数を取り、最初の引数はクエリの select 句です。この最初の引数では、count(*) の代わりに count(1) を定義できます。例えば:

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(EventLog.class, "event")
                .createAlias("site", "site").setProjection(Projections.projectionList()
                        .add(Projections.sqlGroupProjection("var_val1,count(1) as count",
                                "var_val1",
                                new String[]{"var_val1", "count"},
                                new Type[]{Hibernate.STRING, Hibernate.INTEGER})))
                .add(Restrictions.ge("event.date_time", strFrom))
                .add(Restrictions.eq("site.companyID", custid))
于 2012-05-24T14:33:26.263 に答える
1

StandartSQLFuction インターフェイスを実装することで、カスタム カウント関数を作成できます。次に、使用している方言クラスをサブクラス化し、 registerFunction メソッドを使用して関数をコンストラクターに登録する必要があります。

于 2011-11-10T04:50:19.860 に答える