`
jaesonchen
  • 浏览: 313259 次
  • 来自: ...
社区版块
存档分类
最新评论

hibernate SQLQuery

 
阅读更多
Session session = null;
try {
	session = HibernateSessionFactory.getSession();
	session.beginTransaction();
			
	//标量查询(Scalar queries) 
	//它们都将返回一个Object数组(Object[])组成的List,数组每个元素都是user表的一个字段值。
	//Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型。 
	//session.createSQLQuery("SELECT * FROM user").list();  
	//session.createSQLQuery("SELECT id, userName FROM user").list(); 
	//SQLQuery query = session.createSQLQuery("select * from user where id = ?");
	//query.setParameter(0, 12);

	List results = session.createSQLQuery("SELECT id, userName FROM user").list(); 
	System.out.println(((Object[]) results.get(0))[1]);
			
	//实体查询(Entity queries) 
	//通过addEntity()让原生查询返回实体对象。 
	//session.createSQLQuery("SELECT * FROM user").addEntity(User.class);  
	//session.createSQLQuery("SELECT id, userName FROM user").addEntity(User.class); 
	//假若实体在映射时有一个many-to-one的关联指向另外一个实体,在查询时必须也返回那个实体,
	//否则会导致发生一个"column not found"的数据库错误。
	results = session.createSQLQuery("SELECT id, name, sex, clazz_id FROM student")
			.addEntity(Student.class).list();
	for(Iterator iterator = results.iterator(); iterator.hasNext(); ) {
		Student stu = (Student) iterator.next();
		System.out.println("clazzName=" + stu.getClazz().getName());
	}
			
	//处理关联和集合类 
	//join查询会在每行返回多个实体对象,处理时需要注意 。 
	results = session.createSQLQuery("select {user.*}, {dept.*} from user user, department dept where user.dept_id = dept.id")
					.addEntity("user", User.class)
					.addJoin("dept", "user.department")
					.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)
					.list();
	Map map = (HashMap) results.get(0);
	User user = (User) map.get("user");
	System.out.println(user.getUserName());
	System.out.println(user.getDepartment().getDeptName());
			
	results = session.createSQLQuery("select {user.*}, {dept.*} from user user, department dept where user.dept_id = dept.id")
					.addEntity("user", User.class)
					.addJoin("dept", "user.department")
					.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
					.list();
	Department dept = (Department) results.get(0);
	System.out.println(dept.getDeptName());
			
	session.getTransaction().commit();
			
} catch(Exception e) {
	e.printStackTrace();  
	session.getTransaction().rollback();  
} finally {  
	HibernateSessionFactory.closeSession();  
}

   * 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。

 

分享到:
评论

相关推荐

    Hibernate SQLQuery 本地查询

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

    Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法

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

    Hibernate SQLQuery执行原生SQL.docx

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

    hibernate sql query.pdf

    hibernate sql hqlsql

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

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

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

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

    Hibernate中Sql语句

    - **执行查询**:通过`Session`的`createSQLQuery`方法创建`SQLQuery`对象,并设置结果转换方式,最后执行查询并返回结果。 ```java SQLQuery query1 = session.createSQLQuery(sql); query1.addScalar("product...

    hibernate执行原生sql语句

    Hibernate 提供了多种方式来执行原生 SQL 语句,其中之一是使用 `Session.createSQLQuery()` 方法,该方法返回一个 `SQLQuery` 对象,该对象提供了执行原生 SQL 语句的方法。 例如,我们可以使用以下代码来执行一个...

    Hibernate_query聚合函数查询.

    首先,让我们了解一下Hibernate中的HQL(Hibernate Query Language),它是Hibernate提供的面向对象的查询语言,类似于SQL,但更贴近于Java。在HQL中,我们可以方便地使用聚合函数进行数据处理。例如,如果你想要...

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

    SQLQuery query = session.createSQLQuery(sql); ``` 如果查询返回的是单个对象,我们可以使用`addEntity()`方法指定结果应映射到的实体类: ```java query.addEntity(MyEntity.class); MyEntity result = ...

    hibernate 实践 Query详解

    在这个“hibernate 实践 - Query详解”的主题中,我们将深入理解如何使用Query接口来执行SQL查询,并绑定参数。 1. **Query接口** Query接口是Hibernate提供的一种用于执行HQL(Hibernate查询语言)或SQL查询的API...

    Hibernate+本地SQL查询SQLQuery.pdf

    《Hibernate中的本地SQL查询SQLQuery》 在Java的持久化框架Hibernate中,有时我们需要使用原生的SQL查询来实现特定的数据库操作,这时就需要利用到SQLQuery接口。本篇文章将详细解析如何使用Hibernate的SQLQuery来...

    hibernate实现动态SQL查询

    SQLQuery query = session.createSQLQuery(sql); // 设置参数绑定 query.setParameter("param1", value1); query.setParameter("param2", value2); List[]> result = query.list(); ``` 八、总结 通过XML配置SQL和...

    hibernate数据库通用SQL代码

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

    Native SQL查询 (使用SQLQuery).doc

    在 Hibernate 中,使用 SQLQuery 可以执行 Native SQL 查询,控制查询的执行是通过 SQLQuery 接口进行的,通过执行 Session.createSQLQuery() 获取这个接口。下面将详细介绍如何使用这个 API 进行查询。 标量查询...

    hibernate 连接sqlserver2000

    8. **查询**: Hibernate提供HQL(Hibernate Query Language)和 Criteria API 来执行查询。例如,用HQL获取所有实体: ```java List<Entity> entities = session.createQuery("from Entity").list(); ``` 9. **...

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

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

    \Hibernate_query条件查询

    1. **HQL(Hibernate Query Language)** HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但操作的对象是对象而非表。例如,要获取所有用户,可以使用以下HQL语句: ```java Query query = session....

Global site tag (gtag.js) - Google Analytics