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

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 SQLQuery 查询Oracle char类型结果为一个字符解决方法

    ### Hibernate SQLQuery 查询Oracle char类型结果为一个字符的解决方法 在使用Hibernate框架结合Oracle数据库进行数据查询时,经常会遇到一个问题:当查询的结果集中包含char类型的字段时,Hibernate可能会将其映射...

    Hibernate SQLQuery 本地查询

    在Java的持久化框架Hibernate中,SQLQuery是用于执行自定义SQL语句的重要工具,它允许开发者绕过ORM(对象关系映射)的抽象层,直接与数据库进行交互。这篇博客"Hibernate SQLQuery 本地查询"可能详细讲解了如何利用...

    Hibernate SQLQuery执行原生SQL.docx

    在Java的Hibernate框架中,有时候我们需要执行自定义的SQL查询以获取特定的数据,这时就可以使用SQLQuery接口。本文将深入探讨Hibernate如何通过SQLQuery接口执行原生SQL查询,并展示如何处理查询结果。 一、创建...

    hibernate query调用oracle存储过程

    本篇文章将深入探讨如何使用Hibernate的Query接口来调用Oracle的存储过程和函数,以及提供相关的示例代码和数据库文件。 首先,让我们了解什么是存储过程和函数。存储过程是预编译的SQL语句集合,可以接受参数、...

    hibernate sql query.pdf

    hibernate sql hqlsql

    Myeclipse 10.0 + Hibernate 4.3.5 连接 Oracle 11G的演示代码

    标题 "Myeclipse 10.0 + Hibernate 4.3.5 连接 Oracle 11G的演示代码" 描述的是一个整合项目,它将Myeclipse 10.0集成开发环境、Hibernate 4.3.5对象关系映射框架与Oracle 11G数据库相结合,用于演示如何在这样的...

    Struts2+Hibernate3+Oracle登录Demo

    在本Demo中,Hibernate3可能被用来创建User实体类,映射到Oracle数据库中的用户表,通过HQL(Hibernate Query Language)进行数据查询和更新。 Oracle作为一款强大的关系型数据库管理系统,广泛应用于大型企业级...

    hibernate实例连oracle

    标题“hibernate实例连oracle”表明我们正在讨论如何使用Hibernate框架来连接并操作Oracle数据库。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者使用面向对象的编程方式来处理数据库交互,而无需...

    解决Hibernate SQL Query Cache的一个可靠性问题(附源码)

    fix包 博文链接:https://raymondhekk.iteye.com/blog/250427

    Hibernate+本地SQL查询SQLQuery宣贯.pdf

    在某些情况下,开发者可能需要使用原生SQL查询来执行特定的数据库操作,这时就可以利用Hibernate的SQLQuery功能。本文将详细讲解如何使用Hibernate的SQLQuery进行本地SQL查询。 首先,创建SQLQuery实例是通过...

    springmvc+hibernate+oracle基础框架

    《构建基于SpringMVC、Hibernate和Oracle的基础框架》 在现代企业级应用开发中,SpringMVC、Hibernate和Oracle的组合被广泛应用于构建强大的后端系统。这些技术各自扮演着关键角色,共同构成了一个高效、稳定的开发...

    test_hibernate_oracle_03.zip_Insert _hibernate_oracle_query_upda

    【描述】"hibernate, oracle, insert, query, update, delete" 是关键主题,这表明项目的核心是使用Java持久化框架Hibernate与Oracle关系型数据库系统交互,涵盖数据的增、删、改、查四大基本操作。 【标签】...

    详解Hibernate呼叫Oracle的存贮过程和函数

    本示例演示Hibernate 3.2呼叫Oracle的存贮过程和函数,以及通过Hibernate的Query接口简化JDBC的开发步骤--两个步骤得到List集合。使用这种方式开发可以要求开发人员不需要太了解Hibernate框架,但是需要开发人员非常...

    struts2+spring+hibernate源码(oracle数据库)

    这个压缩包提供了一个使用SSH(Struts2、Spring、Hibernate)和Oracle数据库的示例项目,名为"Myssh2",对于初学者来说,这是一个很好的学习资源。 **Struts2** 是一个MVC(Model-View-Controller)框架,负责处理...

    hibernate连接oracle的jar包

    9. **查询语言HQL和SQL**:Hibernate提供了一种面向对象的查询语言——HQL(Hibernate Query Language),以及对原生SQL的支持。我们可以根据需求选择合适的查询方式。 10. **缓存机制**:Hibernate提供了第一级...

    hibernate 调用oracle函数

    4. **定义Hibernate Native SQL查询**:由于Hibernate默认不支持调用存储过程或函数,我们需要使用`@NamedNativeQuery`或`@SqlResultSetMapping`注解来定义一个原生SQL查询,用于调用Oracle函数。例如: ```java @...

    Hibernate中Sql语句

    在Java开发中,Hibernate作为一个非常流行的ORM框架,提供了多种查询方式,其中就包括了HQL(Hibernate Query Language)和原生SQL查询。本文将针对给定代码片段中的核心知识点——如何在Hibernate中使用原生SQL而非...

    在hibernate中实现oracle的自动增长

    本文将深入探讨如何在Hibernate中实现Oracle数据库的自动增长特性,这一功能对于确保数据表中的主键唯一性至关重要。 ### Oracle数据库的自动增长机制 Oracle数据库提供了强大的序列(sequence)功能来支持自动增长...

    hibernate框架下对oracle数据库操作所需jar包.zip

    Hibernate提供了一种基于Java语法的查询语言HQL(Hibernate Query Language),以及Criteria API,它们可以更直观地处理数据库查询,而无需直接编写SQL。 9. **缓存机制** Hibernate支持二级缓存,可以提高数据...

Global site tag (gtag.js) - Google Analytics