`
jinnianshilongnian
  • 浏览: 21532710 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2423871
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:3013345
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5642825
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:260777
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1599084
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:250707
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5864048
Group-logo
跟我学Nginx+Lua开...
浏览量:703723
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:787127
社区版块
存档分类
最新评论

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

4
4
分享到:
评论
3 楼 jinnianshilongnian 2013-06-19  
shmily2038 写道
使用原生sql,oracle映射为非持久化对象,所有字段都自动转为大写了,但是非持久化对象的属性以驼峰式命名,这个也会报错。 不清楚解决了?


这个不应该算是bug, 这个是正常的;取数据库元数据时
解决办法:
1、起别名:FIRSTNAME as firstName  如果不行,可以使用区分大小写的方式如oracle  FIRSTNAME as "firstName" mysql FIRSTNAME as `firstName`
2、定自定义ResultTransformer去实现
2 楼 shmily2038 2013-06-19  
使用原生sql,oracle映射为非持久化对象,所有字段都自动转为大写了,但是非持久化对象的属性以驼峰式命名,这个也会报错。 不清楚解决了?
1 楼 steafler 2013-05-23  
楼主,大牛呀,这些问题都能发现

相关推荐

    hibernate-distribution-3.6.0.Final-dist

    3. **查询语言**:Hibernate支持HQL(Hibernate Query Language),一种类似SQL的语言,但针对对象而非表格。此外,还提供了 Criteria 查询和JPQL(Java Persistence Query Language)。 4. **缓存机制**:...

    hibernate-release-4.1.5.SP1

    在Hibernate 4.1.5.SP1中,这个框架已经相当成熟,支持多种数据库平台,包括MySQL、Oracle、PostgreSQL等,并且具备强大的查询语言——HQL(Hibernate Query Language)。 二、主要特性 1. **对象关系映射(ORM)**...

    s2sh所需的所有包

    它支持各种数据库,包括MySQL、Oracle、PostgreSQL等,并且提供了查询语言HQL(Hibernate Query Language)和Criteria API,使得操作数据库更加便捷。 在实际开发中,选择稳定的老版本有时比追求最新版更有优势,...

    为处理完的管理系统,包含购物,学生管理都很适用

    SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言,系统很可能使用SQL来存储和检索数据,如用户信息、商品信息等。 结合这些标签,我们可以推测这个管理系统可能是用Java语言开发的,使用JSP...

    NHibernate-2.0.0.CR1-bin.zip

    NHibernate支持多种数据库,如MySQL、SQL Server、Oracle等,并且遵循ADO.NET标准。 2. **版本2.0.0.CR1**: CR1代表Candidate Release 1,是正式版本前的一个候选版本。这个版本可能包含了新的功能、性能优化以及...

    NBearV3.7.2_binary.zip

    5. **查询语言**:NBear支持直接使用HQL(Hibernate Query Language)或SQL进行查询,提供灵活性和强大的查询能力。 6. **设计模式支持**:NBear融入了如工厂模式、单例模式等多种设计模式,使得代码更加模块化和...

    SpringJdbcTemplate封装工具类

    - 调用对应的方法,如`update()`执行更新操作,`queryForObject()`或`query()`执行查询操作,传入SQL语句和参数。 - 如果是查询操作,可以使用`RowMapper`或`ResultSetExtractor`来映射结果到Java对象。 8. **...

    BeanKeeper-开源

    同时,它还支持使用类似HQL(Hibernate Query Language)的查询语言,使得查询更加直观且易于理解。 4. **事务管理**:BeanKeeper集成了JDBC事务管理,确保数据操作的原子性、一致性、隔离性和持久性,符合ACID原则...

Global site tag (gtag.js) - Google Analytics