`
vvv_110
  • 浏览: 144564 次
社区版块
存档分类
最新评论

Hibernate 查询Oracle数据结果为一个字符解决方法汇总

阅读更多

 

在使用Hibernate的原生态SQL对Oracle进行查询时,碰到查询char类型的时候始终返回的是一个字符,开始认为应该是Hibernate在做映射的把数据类型给映射成char(1),在经过查找网上的一些资料,得知产生这个问题的主要原因确实是Hibernate再查询Oracle的时候,将char自动映射成character(varchar的子集)类型,oracle的char字段在hibernate里映射为character类型,是varchar的子集

1:将你要查询的实体转换成实体Bean</STRONG>,使用HQL查询,每个表都有映射文件配置,反向工程生成的映射文件里对于多字符的char会自动映射到java中的string类型。这样就不存在字段映射的问题了,但是这样不能使用SQL;

2:可以使用Hibernate中的addScalar(String arg,Type
type)来自定义返回字段的类型,如:

this.getSession().createSQLQuery("select id,name,state from tb")
.addScalar("id", Hibernate.STRING)
.addScalar("name", Hibernate.STRING)

.addScalar("state", Hibernate.STRING
).list(); 

这样就可以解决,但是这样的话,必须把所有要查询的字段进行定义,在字段比较多的时候,就相对比较麻烦
3:在Oracle查询语句中直接指定数据格式,如:

select id,name,cast(state as varchar(2)) from tb

这种解决方法比较方便,只需要在查询语句指定char的返回类型,推荐使用这种方法进行查询。


4、修改hibernate默认的char映射类型
通过重写继承其方言类实现。自定义Hibernate Dialect.我用的数据库是ORACLE,:

首先建一个类,继承com.digitwater.fwk.hibernate.Oracle9iDialect,该类的内容如下:

 

 

package com.digitwater.fwk.hibernate;

import java.sql.Types;

import org.hibernate.Hibernate;

 

/

/

public Oracle9iDialect() {

super();

registerHibernateType(Types.CHAR, Hibernate.STRING.getName());

 

}

 

}

 

第二步,就是修改hibernate的配置文件hibernate.cfg.xml:

将:

<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</prop>

改为:

<prop key="hibernate.dialect">com.digitwater.fwk.hibernate.Oracle9iDialect</prop>

 


此方法改动是最小的。目前使用正常,暂时没发现其它问题。




附:oracle cast()函数用法:

 

cast 是进行类型转换的, 可以针对各种Oracle数据类型. 修改的是用户的数据类型.

round只是修改的数据显示格式. 对数据做四舍五入. 类似的函数还有ceil(取此数据的最小整数).

trunc( 取整函数.)

SQL> create table t1(a varchar(10));

Table created.

SQL> insert into t1 values ('12.3456');

1 row created.

SQL> select round(a) from t1;

ROUND(A)
----------
12

SQL> select round(a,3) from t1;

ROUND(A,3)
----------
12.346

SQL> select cast(a as int) from t1;

CAST(AASINT)
------------
12

SQL> select cast(a as number(8,4)) from t1;

CAST(AASNUMBER(8,4))
--------------------
12.3456

————转自http://blog.sina.com.cn/s/blog_6bf3a474010121zt.html

 

分享到:
评论

相关推荐

    oracle从基础到精通

    - INSERT SELECT:从另一个查询结果中插入记录。 - **UPDATE语句:** - 更新表中的记录。 - 示例:`UPDATE employees SET salary = salary * 1.1 WHERE department_id = 50;` - **DELETE语句:** - 删除表中的...

    JAVA+ORALCE面试题汇总

    - **UNION**:将两个或多个SELECT语句的结果合并为一个结果集。要求所有SELECT语句具有相同的列数,并且对应列的数据类型相似。UNION自动去重,UNION ALL则保留重复行。 以上知识点涵盖了Java和Oracle领域的一些...

    SQL快速提高手册

    1. WHERE子句:用于过滤查询结果,只返回满足指定条件的行。 2. STARTING WITH子句:用于LIKE的替代,用于模糊匹配字符串的开头。 3. ORDER BY子句:用于按一个或多个列对结果集进行排序。 4. GROUP BY子句:用于将...

    sql 21days

    视图可以看作是一个虚拟表,其内容由查询结果构成。创建视图可以简化复杂的查询,提高数据安全性。索引则用于加速数据检索,但会占用额外的磁盘空间并可能影响写入性能。 以上只是SQL学习旅程的冰山一角,深入理解...

    SQL21自学通

    - 视图并不实际存储数据,而是存储了一个查询语句,当访问视图时才会执行该查询。 以上是对《SQL21自学通》部分内容的知识点梳理,希望能够帮助读者更好地理解和掌握SQL的基础知识和高级技巧。

    2016面试汇总.doc

    抽象类是类的一个特殊形式,可以包含抽象方法(没有具体实现的方法)和非抽象方法。一个类可以继承一个抽象类,并实现其中的抽象方法。抽象类用于代码的复用和提供基本结构。接口则只包含常量和抽象方法,它允许类...

    面试题目收集_上海最新

    - **Hibernate总结**:Hibernate是一个开源的对象关系映射(ORM)框架,简化了Java应用程序与数据库之间的交互过程。 - **EJB概述**:EJB(Enterprise JavaBeans)是J2EE体系结构的一部分,用于构建可移植的企业级...

    2020 Java面试题汇总.zip

    这份"2020 Java面试题汇总"压缩包文件很可能是为了帮助求职者准备Java开发岗位的面试而整理的一系列问题和解答。在Java面试中,通常会涉及到以下几个核心知识点: 1. **基础语法**:面试官会考察你对Java基本语法的...

    JAVA试题答案大汇总

    "JAVA试题答案大汇总"这个标题和描述暗示了这是一份集合了大量Java编程试题及对应答案的学习资源,旨在帮助学习者检验自己的Java知识掌握程度,巩固基础,提升技能。 在Java的学习过程中,涵盖的知识点非常广泛,...

    [汇总]JAVA实现商品管理系统源代码.doc

    【JAVA实现商品管理系统源代码】是一个关于使用Java编程语言开发的商品管理系统的核心代码文档。这个系统主要目的是管理和操作商品相关的数据,如库存、价格、销售等信息。以下是对系统中涉及的关键知识点的详细解释...

    2013JAVA面试资料汇总

    11. **数据库**:理解SQL语言,包括基本查询、连接查询、子查询、事务处理等。熟悉常用的数据库管理系统,如MySQL、Oracle,以及JDBC操作数据库的方式。 12. **Java 8新特性**:包括Lambda表达式、Stream API、...

    JAVA基础,框架知识,WEB知识,数据库知识面试题.

    在IT行业中,尤其是在Java开发领域,掌握扎实的基础知识、熟悉常用...极详细Oracle数据库面试题目汇总则专门针对Oracle数据库的高级特性进行深入探讨。通过这些文档,开发者可以全面地准备面试,提升自己的专业技能。

    Java技术_开发心得_两年开发经验_(文章汇总...热)

    这个压缩包文件名为"Java技术文章",显然包含了作者对于Java编程语言在实际应用中的深入理解和心得体会。以下是基于这些信息提炼出的一些Java技术相关的知识点: 1. **Java基础知识**:作为开发者,对Java的基础...

    Java_笔记整理

    以上内容为Java学习过程中重要的知识点汇总,不仅包含了Java语言本身的核心概念和技术,还覆盖了数据库操作、Web开发、框架使用等方面的内容,对于初学者来说具有很高的参考价值。同时,也提供了一些基本的Linux/...

    javaBook:【java面试汇总&java知识体系结构】记录工作中遇到问题以及总结自己对java的理解

    在Java编程的世界里,深入理解和掌握Java知识体系结构对于每一个开发者来说都是至关重要的。本资源“javaBook”旨在汇总Java面试中的常见问题,以及作者对Java语言的深刻理解。下面将详细探讨Java的核心知识点,帮助...

Global site tag (gtag.js) - Google Analytics