public List getListByOldSql(String sql) {
Session session = null;
List list = new java.util.ArrayList();
try {
session = this.getSession();
list = session.createSQLQuery(sql).list();
} catch (Exception ex) {
} finally {
try {
if (session != null) {
releaseSession(session);
}
} catch (Exception ex) {
// ex.printStackTrace();}
}
}
return list;
}
刚开始一直不知道如何处理这个list,因为我的原生的SQL是从几张表里面取不同的字段的,所以不知道放在list里面的是什么对象,结果才发现,里面原来是一个一个数组来的。所以要一个一个拿出来:
下面是获取第一个数组
Object[] objs = (Object[])list.get(0);
下面是获取第一个数组的第一个元素:
objs[0];
---------------------------------------------------------------------------
Hibernate SQLQuery 查询Oracle char类型结果为一个字符的解决方法
http://blog.csdn.net/henryzhang2009/article/details/6711754
遇到了这个问题 ,在网上搜了一下解决办法,经验证,完全正确;特转载一下:
在使用Hibernate的原生态SQL对Oracle进行查询时,碰到查询char类型的时候始终返回的是一个字符,开始认为应该是Hibernate在做映射的把数据类型给映射成char(1),在经过查找网上的一些资料,得知产生这个问题的主要原因确实是Hibernate再查询Oracle的时候,将char自动映射成character(varchar的子集)类型,现有以下几种解决方法:
1:将你要查询的实体转换成实体Bean,使用HQL查询,这样就不存在字段映射的问题了,但是这样比较麻烦;
2:可以使用Hibernate中的addScalar(String arg,Type type)来自定义返回字段的类型,如:
1 this.getSession()
2 .createSQLQuery("select id,name,state from tb")
3 .addScalar("id", Hibernate.STRING)
4 .addScalar("name", Hibernate.STRING)
5 .addScalar("state", Hibernate.STRING)
6 .list();
这样就可以解决,但是这样的话,必须把所有要查询的字段进行定义,在字段比较多的时候,就相对比较麻烦;
3:在Oracle查询语句中直接指定数据格式,如:
1 select id,name,cast(state as varchar2(100)) from tb
(100) 指的是长度,是可以自己指定的
这种解决方法比较方便,只需要在查询语句指定char的返回类型,推荐使用这种方法进行查询。
分享到:
相关推荐
hibernate执行原生sql语句
NULL 博文链接:https://ynp.iteye.com/blog/2007053
该方式是原生SQL查询的一种方式,需要个人自己书写SQL语句进行操作,用法比较灵活多变,适合比较复杂的SQL查询.该压缩包是本人对该查询方式的一种总结练习
Hibernate 函数 ,子查询 和原生SQL查询。Hibernate 函数 ,子查询 和原生SQL查询
集成spring,hibernate,并且自写了一个sql的解析器,只有controller和service层,非常方便
Hibernate中的查询:HQL、Criteria、原生SQl的Demo,希望可以帮助大家理解Hibernate查询。
Hibernate对原生SQL查询的支持和控制是通过SQLQuery接口实现的。通过Session接口,我们能够很方便的创建一个SQLQuery(SQLQuery是一个接口,在Hibernate4.2.2之前,默认返回的是SQLQuery的实现类——SQLQueryImpl对象...
spring4+hibernate4.3.5,连接sql,使用springMVC框架,完整可运行的程序,看李守宏的视屏,有些做了修改,比如spring版本,用JTDS连接,新手可参考做
springboot利用jpa连接hibernate,并进行生成表,对表的增加,删除,查询操作用法2
NULL 博文链接:https://jeffenchung.iteye.com/blog/1472402
主要介绍了Java的Hibernate框架中的缓存与原生SQL语句的使用,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
问题描述: 备注:刚开始SQL 没有加任何AS ... WITH query AS (SELECT inner_query.*, ROW_NUMBER() OVER (ORDER BY CURRENT_TIMESTAMP) as __hibernate_row_nr__ FROM 第二页 明显不一样的处理逻辑 select med.* fro
在多数情况下不及特定数据库支持的物理分页,而hibernate的分页则是直接组装sql,充分利用了特定数据库的分页机制,效率相 对较高。本文讲述的就是如何在不重新编译ibatis源码的前提下,为ibatis引入hibernate式的...
可跟 Hibernate 和 JPA 等框架结合使用。 基本查询: JPAQuery query = new JPAQuery(entityManager); List persons = query.from(person) .where( person.firstName.eq("John"), person.lastName....
Hibernate支持强大且易于使用的面向对象查询语言(HQL)。 如果希望通过编程的方式创建查询,Hibernate... 你也可以用原生SQL(native SQL)描述Hibernate查询,Hibernate额外提供了将结果集(result set)转化为对象的支持。
15.2.3 Java Persistence中的原生SQL 15.3 过滤集合 15.4 高速缓存查询结果 15.4.1 启用查询结果高速缓存 15.4.2 理解查询高速缓存 15.4.3 什么时候使用查询高速缓存 15.4.4 自然标识符...
10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...
大家常规的做法是采用springjdbc来实现原生SQL编写,但是也同样存在问题,SQL无法分离也没有逻辑标签能力。所以为了解决这个痛病,Jeecg针对springjdbc + freemarker做封装,出了这么一个轻量级永久层,可以让...
10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...
10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...