ここにはかなり複雑なクエリがあり、限られた結果セットに加えて、利用可能な結果セットの合計も返す必要があります。
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 で実行されます