`
panshaobinSB
  • 浏览: 203009 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

hibernate用原生SQL

 
阅读更多
	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语句

    "hibernate执行原生sql语句" Hibernate 是一种流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在一些情况下,我们需要直接执行原生 SQL 语句,而不是使用 Hibernate 的...

    hibernate 执行原生sql的几种方式

    虽然`Criteria API`主要是为了使用Hibernate的ORM功能,但也可以通过`Projections.sqlProjection()`执行原生SQL投影,从而创建自定义的查询。 ```java Criteria criteria = session.createCriteria(User.class); ...

    Hibernate之原生Native SQL查询

    当然,原生SQL查询也有一些需要注意的地方。由于直接操作SQL,所以数据库的兼容性问题需要开发者自己处理。此外,如果查询结果需要映射到多个实体类,或者返回复杂的结果集,那么处理起来可能会比较麻烦,需要手动...

    spring+hibernate,自己封装了原生sql的处理,模仿mybatis使用

    描述中提到"自己封装了原生sql的处理,模仿mybatis使用",这意味着开发者在项目中创建了一个类似MyBatis的简单SQL解析器。MyBatis是一个轻量级的持久层框架,它允许开发者编写原生的SQL语句并将其与Java代码绑定。...

    Hibernate中的查询:HQL、Criteria、原生SQl

    本篇文章将深入探讨Hibernate中的三种主要查询方式:HQL(Hibernate Query Language)、Criteria API以及原生SQL。 一、HQL(Hibernate Query Language) HQL是Hibernate提供的一种面向对象的查询语言,它类似于SQL...

    Hibernate 函数 ,子查询 和原生SQL查询

    在使用原生SQL时,需要注意的是,你需要自己处理结果的映射和事务管理,这可能比使用HQL(Hibernate查询语言)更加复杂。 总结,Hibernate提供了丰富的函数支持,使得我们在处理数据时更加便捷。同时,子查询功能...

    hibernate将本地SQL查询结果封装成对象(最终)

    使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...

    Hibernate中Sql语句

    本文将针对给定代码片段中的核心知识点——如何在Hibernate中使用原生SQL而非HQL进行详细解析。 #### 一、为什么要使用原生SQL? 虽然HQL是Hibernate提供的面向对象的语言,能够方便地映射到Java对象,但在某些...

    Hibernate SQLQuery执行原生SQL.docx

    本文将深入探讨Hibernate如何通过SQLQuery接口执行原生SQL查询,并展示如何处理查询结果。 一、创建SQLQuery对象 在Hibernate中,我们通常通过Session接口的createSQLQuery方法来创建SQLQuery对象,例如: ```...

    hibernate将本地SQL查询结果封装成对象

    首先,本地SQL查询(Native SQL)是指直接在Hibernate中使用原生的SQL语句进行查询,而不是使用HQL(Hibernate Query Language)。这允许开发者充分利用SQL的功能,比如进行复杂的统计计算或者处理特定数据库的特性...

    hibernate数据库通用SQL代码

    查询数据的方法有两种实现,一种是基于HQL(Hibernate Query Language),另一种是基于原生SQL。 - 基于HQL的通用查询: HQL是Hibernate提供的面向对象的查询语言,可以方便地操作对象和属性。`select`方法接收一个...

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

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

    Hibernat使用原生的SQL

    标题 "Hibernat使用原生的SQL" 涉及的是在Java开发中如何利用Hibernate框架执行自定义的SQL语句。Hibernate是一个流行的...为了进一步学习,建议阅读该文档,进行实际的编码练习,以加深对Hibernate原生SQL使用的理解。

    hibernate将本地SQL查询结果封装成对象(最终).zip

    Hibernate支持两种类型的查询:原生SQL查询和Hibernate查询语言(HQL)。原生SQL查询允许开发者直接执行SQL语句,而HQL则是面向对象的查询语言,类似于SQL但更接近于Java。 4. 封装SQL查询结果为对象: - `...

    mybatis,ibatis,hibernate 显示查询SQL

    MyBatis 的主要特点是灵活的SQL映射,通过XML或注解方式配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。为了显示查询SQL,MyBatis 提供了日志配置,通常...

    springboot利用jpa连接hibernate用法2

    Hibernate使用Java类作为数据库表的映射,这些类被称为实体类。需要使用`@Entity`注解标识,并使用`@Table`注解指定对应的数据库表名。同时,每个实体类的主键通常使用`@Id`注解标记。 4. **Repository接口**: ...

    关于Hibernate分页类和jdbc的sql分页完美融合

    本主题将探讨如何在Hibernate分页类和JDBC的SQL分页方法之间实现完美的融合,以提高性能并提供更好的用户体验。 首先,让我们了解一下Hibernate的分页功能。Hibernate提供了一种方便的方式来处理分页查询,通过...

    Hibernate+本地SQL查询SQLQuery.pdf

    原生SQL查询可能返回单一标量值或混合标量值与实体的结果。例如,查询猫的最大体重: ```java Double max = (Double) sess.createSQLQuery("select max(cat.weight) as maxWeight from cats cat") .addScalar(...

    详解Java的Hibernate框架中的缓存与原生SQL语句的使用

    本文将深入探讨Hibernate中的缓存机制以及如何使用原生SQL语句。 缓存是提升应用程序性能的关键因素,特别是对于频繁访问数据库的应用。在Hibernate中,缓存分为三个层次: 1. 第一级缓存:这是SessionFactory创建...

    Hibernate_NSQL&HQL增删改操作

    NSQL指的是原生SQL语句,即直接使用的SQL语句。在Hibernate中,可以通过`createSQLQuery()`方法来执行NSQL语句。这种方式适用于那些无法通过HQL表达的复杂查询或者需要与特定数据库特性紧密结合的情况。 **示例代码...

Global site tag (gtag.js) - Google Analytics