欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hibernate SQLQuery oracle BUG

程序员文章站 2022-03-02 10:34:18
...

数据库:

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]

 可以看到结果是Object数组,而不是单个name值,可以看出主要原因是第二页分页需要加一个rownum造成的。

 

 

解决方案,使用hibernate标量:

q.addScalar("name", StringType.INSTANCE);

 这样就不会有问题了。

 

已提交给hibernate jira

https://hibernate.atlassian.net/i#browse/HHH-8258