4

次のエンティティを検討してください。

@Entity
public class User {
    private int id;
    private String name;
    private String family;
    //getters and setters
}

そしてSQL:

select * 
from (select row_.*, first_Value(rownum) over (order by rownum desc) countـ
      from (select * from user) row_)

ご想像のとおり、sql の結果セットは 4 つの列で構成されています。

id, name, family, countـ

次の方法で、ユーザー テーブル レコードをユーザーのリストとして取得します。

String myQuery = "select * from (select row_.*, first_Value(rownum) over (order by rownum desc) count_
      from (select * from user) row_)"
Query query = entityManager.createNativeQuery(myQuery, User.class);
List<User> users = query.getResultList();

ここでの問題は、 getResultList() または他の休止状態に相当するものを一度呼び出すだけで、ユーザーのリストを取得し、値をカウントするにはどうすればよいかということです。

Oracle 11g と Jpa (Hibernate 実装 3.6) を使用しています。

前もって感謝します。

4

1 に答える 1

2

「カウント」は予約語だと思います。そして、次のようにクエリを再編成します。

String myQuery = "SELECT "
        + "id, "
        + "name, "
        + "family, "
        + "cnt "
        + "FROM ("
            + "SELECT "
            + "user.*, "
            + "first_Value(rownum) over (order by rownum desc) AS cnt "
            + "FROM "
            + "user "
        + ")";
    Query query = entityManager.createNativeQuery(myQuery);
    List<Object[]> resultList = query.getResultList();

もちろん、「id、name、family、cnt」の代わりに * を使用することもできます。

于 2013-04-21T15:48:14.507 に答える