0

ページネーション付きの表コンポーネントを実装したいと考えています。テーブルの結果は、次のような multiselect-query によって取得されます。

SELECT DISTINCT t0.userId,
            t0.userName,
            t1.rolleName
FROM userTable t0
LEFT OUTER JOIN roleTable t1 ON t0.userId = t1.fkUser
WHERE(t0.userType = 'normalUser' AND t1.roleType = 'loginRole')

この結果は、複数選択クエリを介して取得できます。

ページネーションのために、最初に合計行数を取得する必要があります。この sql のいずれかの基準クエリを定義できる人はいますか? サブクエリが複数選択をサポートしていないため、失敗しました。また、この個別を count ステートメントに入れる方法もわかりません。

SELECT COUNT(*) FROM
(
   SELECT DISTINCT t0.userId,
                   t0.userName,
                   t1.rolleName
   FROM userTable t0
   LEFT OUTER JOIN roleTable t1 ON t0.userId = t1.fkUser
   WHERE(t0.userType = 'normalUser' AND t1.roleType = 'loginRole')
)

また

SELECT COUNT(DISTINCT t0.userId || t0.userName || t1.rolleName)
FROM userTable t0
LEFT OUTER JOIN roleTable t1 ON t0.userId = t1.fkUser
WHERE(t0.userType = 'normalUser' AND t1.roleType = 'loginRole')

前もって感謝します!

ところで。WebSphere AppServer で OpenJpa を使用しています

4

2 に答える 2

0

以下はテストされていませんが、動作するはずです。

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(Long.class);
Root<User> t0 = query.from(User.class);
Join<User, Role> t1 = t0.join("roles", JoinType.LEFT); 
query.select(builder.concat(t0.get(User_.userId), builder.concat(t0.get(User_.userName), t1.get(Role_.rolleName))).distinct(true);
query.where(cb.equal(t0.get("userType"), "normalUser"), cb.equal(t1.get("roleType"), "loginRole"));
TypedQuery<Long> tq = em.createQuery(query); 
于 2013-03-04T09:02:30.883 に答える