3

私はJavaでHibernate3.5.6-Finalを使用しています。Hibernateセッションにアクセスできないため、 DetachedCriteriaを使用しています。したがって、 DetachedCriteriaの結果を制限するための最良の方法を知りたいと思います(私の場合、最初の行のみを取得したいと思います)。

追加情報:

Criteriaクラスには、setMaxResults(int maxResults)setFirstResult(int firstResult)など、これを実現するためのメソッドがいくつかありますが、DetachedCriteriaにはどちらもありません。繰り返しになりますが、Hibernateのセッションにアクセスできないため、Criteriaを使用できません。

4

6 に答える 6

10

これは私がそれをしている方法です、あなたはあなたの結果を実行ブロックにラップしなければなりません。以下の例のEntityMAnagerはorg.springframework.orm.hibernate3.HibernateOperationsオブジェクトです:

final DetachedCriteria criteria = DetachedCriteria.forClass(ActivePropertyView.class);
criteria.add(Restrictions.eq("featured", true));
List<ActivePropertyView> result = entityManager.execute(
     new HibernateCallback<List<ActivePropertyView>>() {
         @Override
         public List<ActivePropertyView> doInHibernate(Session session) 
                                         throws HibernateException,SQLException {
                 return criteria.getExecutableCriteria(session).setMaxResults(5).list();
         }
     });
return result;
于 2012-10-27T06:54:36.167 に答える
6

strictions.sqlRestriction()を使用して、プレーンSQL式をDetachedCriteriaに追加できます。これを試して:

DetachedCriteria criteria = DetachedCriteria.forClass(Domain.class)
  .add(Restrictions.sqlRestriction("LIMIT 1"));
于 2012-07-17T01:25:55.370 に答える
4

Hibernateテンプレートを使用している場合は、がありfindByCriteria(criteria, firstResult, maxResults)ます。テンプレートは推奨されていませんが、レガシーコードを使用している場合はこれを利用できます。

于 2016-03-23T15:35:27.860 に答える
2

私がjavadocを正しく読んでいる場合、最終的にDetachedCriteriaを実際のCriteriaに変換するまで制限することはできません(セッションがある場合)

于 2012-07-16T15:52:04.730 に答える
1

yorkwの答えを拡張すると、Oracleに相当するものは次のとおりです。

DetachedCriteria criteria = DetachedCriteria.forClass(Domain.class)
  .add(Restrictions.sqlRestriction("rownum < 1"));

サブクエリの「where」句に行制限が追加されます。

于 2015-04-23T22:28:36.460 に答える
-1
detachedCriteria.getExecutableCriteria(getSession()).setMaxResults(1);
于 2017-07-29T15:57:49.390 に答える