hibernate SQLQuery oracle BUG
1598 ワード
詳細
データベース:
oracle
テストされた問題のあるバージョン:
hibernate 3.6.0.Final
hibernate 4.2.0.Final
mysqlのようなライブラリを使用しても問題はありません.
コード:
q.setFirstResult(0)の場合.最初のページを取っても大丈夫です.生成されたsqlは次のようになります.
この時点で問題ありません.
q.setFirstResult(1);最初のページを取るのは問題なく、生成されたsqlと印刷の結果は以下の通りです.
結果は単一name値ではなくObject配列であることがわかり、2ページ目のページングにrownumを追加する必要があることが主な原因であることがわかります.
hibernateスカラーを使用したソリューション:
これで問題はありません.
hibernate jiraにコミットされました
https://hibernate.atlassian.net/i#browse/HHH-8258
データベース:
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