3

ここにはかなり複雑なクエリがあり、限られた結果セットに加えて、利用可能な結果セットの合計も返す必要があります。

MySQL には SQL_CALC_FOUND_ROWS オプションがあり、インターセプターを使用して後続のクエリでその数値を返すことができます。ネイティブクエリとインターセプターで休止状態を使用して、同様のプロジェクトでこれを既に実装しており、正常に機能しました。

ただし、この場合、この複雑な JPA Criteria クエリが既に存在するため、その mysql オプションを基準クエリに追加できれば幸いですが、これを行う方法は今のところ見つかりませんでした。

以下は、entityManager と Criteria の設定方法に関する詳細です。

    @Stateless
    class Dao{
      @PersistenceContext(unitName = "persistenceName")
      private EntityManager entityManager;

      @TransactionAttribute(TransactionAttributeType.SUPPORTS)
      public List<Entity> find(String someParam) {
        CriteriaBuilder cb = this.entityManager.getCriteriaBuilder();
        CriteriaQuery<Entity> cq = cb.createQuery(Entity.class);
        Root<Entity> root = cq.from(Entity.class);

        // some dummy predicate here
        cq.where(predicates);

        TypedQuery<Entity> query = this.entityManager.createQuery(cq);

        // limit query
        query.setFirstResult(100);
        query.setMaxResults(10);

        return query.getResultList();
      }
    }

SQL_CALC_FOUND_ROWS オプションを追加する方法はありますか? このことは、Glassfish 3 と Hibernate 3.5 で実行されます

4

1 に答える 1

0

eclipselink を使用しているときに同じ問題が発生しましたが、これで修正されました。

query.setHint("eclipselink.sql.hint", "SQL_CALC_FOUND_ROWS");

eclipselink.sql.hint フラグは、クエリの最初の単語 (この場合は SELECT) の直後に文字列を追加するように指示します。Hibernate に相当するものがあるかもしれません。

于 2014-06-16T09:26:20.223 に答える