hibernate SQLQuery oracle BUG

1598 ワード

詳細
データベース:
oracle
テストされた問題のあるバージョン:
   hibernate 3.6.0.Final
   hibernate 4.2.0.Final
mysqlのようなライブラリを使用しても問題はありません.
 
コード:
SQLQuery q = session.createSQLQuery("select name from tbl_user");
q.setFirstResult(N);
q.setMaxResults(3);
System.out.println(q.list());

q.setFirstResult(0)の場合.最初のページを取っても大丈夫です.生成されたsqlは次のようになります.
Hibernate: 
    select
        * 
    from
        ( select
            name 
        from
            tbl_user ) 
    where
        rownum <= ?
[null, 2, null]

この時点で問題ありません. 
 
q.setFirstResult(1);最初のページを取るのは問題なく、生成されたsqlと印刷の結果は以下の通りです.
Hibernate: 
    select
        * 
    from
        ( select
            row_.*,
            rownum rownum_ 
        from
            ( select
                name 
            from
                tbl_user ) row_ 
        where
            rownum <= ?
        ) 
    where
        rownum_ > ?
[[Ljava.lang.Object;@1e6d4a8, [Ljava.lang.Object;@1938886, [Ljava.lang.Object;@e8259c]

結果は単一name値ではなくObject配列であることがわかり、2ページ目のページングにrownumを追加する必要があることが主な原因であることがわかります.
 
 
hibernateスカラーを使用したソリューション:
q.addScalar("name", StringType.INSTANCE);

これで問題はありません.
 
hibernate jiraにコミットされました
https://hibernate.atlassian.net/i#browse/HHH-8258