hibernate SQLQuery oracle BUG

数据库:

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

你可能感兴趣的:(Hibernate)