Hibernate执行原生sql时,将数据库的char(n)类型转换成了character类型的解决方案
2014-02-26 11:55
246 查看
在使用Hibernate的原生态SQL对Oracle进行查询时,碰到查询char类型的时候始终返回的是一个字符,开始认为应该是Hibernate在做映射的把数据类型给映射成char(1),在经过查找网上的一些资料,得知产生这个问题的主要原因确实是Hibernate再查询Oracle的时候,将char自动映射成character(varchar的子集)类型,现有以下几种解决方法:
1:将你要查询的实体转换成实体Bean,使用HQL查询,这样就不存在字段映射的问题了,但是这样比较麻烦;
2:可以使用Hibernate中的addScalar(String arg,Type type)来自定义返回字段的类型,如:
这样就可以解决,但是这样的话,必须把所有要查询的字段进行定义,在字段比较多的时候,就相对比较麻烦;
3:在Oracle查询语句中直接指定数据格式,如:
这种解决方法比较方便,只需要在查询语句指定char的返回类型,推荐使用这种方法进行查询。
1:将你要查询的实体转换成实体Bean,使用HQL查询,这样就不存在字段映射的问题了,但是这样比较麻烦;
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的返回类型,推荐使用这种方法进行查询。
相关文章推荐
- 在hibernate中直接执行原生sql遇到类型转换问题
- hibernate,执行原生SQL并将结果转换为Map
- Hibernate执行原生SQL返回List<Map>类型结果集
- Hibernate执行原生sql,list转换问题
- Hibernate执行原生SQL返回List<Map>类型结果集
- Hibernate原生SQL映射MySQL的CHAR(n)类型到String时出错
- Hibernate的createSQLQuery 查询数据库类型为char的字段时要注意
- Hibernate的createSQLQuery 查询数据库类型为char的字段时要注意
- Hibernate的createSQLQuery 查询数据库类型为char的字段时要注意
- JPA执行原生SQL截断Char类型问题
- C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断
- EntityManager转换为Hibernate的Session执行sql获取Map类型的数据集合
- JPA执行原生SQL截断Char类型问题
- 数据库执行语句时,严重注意类型转换的问题
- Java中定义的泛型字段到数据库中自动转换成了int类型字段 解决方案
- 使用Hibernate SQLQuery执行原生SQL
- String类型转换成java.sql.Date存入数据库
- ThinkPHP实现对数据库中表的修改删除以及两种原生SQL语句的执行
- 使用Hibernate SQLQuery执行原生SQL
- mysql中字符和数字在执行sql时进行类型转换