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