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()获取这个接口。
相关推荐
在Java的持久化框架Hibernate中,SQLQuery是用于执行自定义SQL语句的重要工具,它允许开发者绕过ORM(对象关系映射)的抽象层,直接与数据库进行交互。这篇博客"Hibernate SQLQuery 本地查询"可能详细讲解了如何利用...
### Hibernate SQLQuery 查询Oracle char类型结果为一个字符的解决方法 在使用Hibernate框架结合Oracle数据库进行数据查询时,经常会遇到一个问题:当查询的结果集中包含char类型的字段时,Hibernate可能会将其映射...
在Java的Hibernate框架中,有时候我们需要执行自定义的SQL查询以获取特定的数据,这时就可以使用SQLQuery接口。本文将深入探讨Hibernate如何通过SQLQuery接口执行原生SQL查询,并展示如何处理查询结果。 一、创建...
hibernate sql hqlsql
fix包 博文链接:https://raymondhekk.iteye.com/blog/250427
在某些情况下,开发者可能需要使用原生SQL查询来执行特定的数据库操作,这时就可以利用Hibernate的SQLQuery功能。本文将详细讲解如何使用Hibernate的SQLQuery进行本地SQL查询。 首先,创建SQLQuery实例是通过...
- **执行查询**:通过`Session`的`createSQLQuery`方法创建`SQLQuery`对象,并设置结果转换方式,最后执行查询并返回结果。 ```java SQLQuery query1 = session.createSQLQuery(sql); query1.addScalar("product...
Hibernate 提供了多种方式来执行原生 SQL 语句,其中之一是使用 `Session.createSQLQuery()` 方法,该方法返回一个 `SQLQuery` 对象,该对象提供了执行原生 SQL 语句的方法。 例如,我们可以使用以下代码来执行一个...
首先,让我们了解一下Hibernate中的HQL(Hibernate Query Language),它是Hibernate提供的面向对象的查询语言,类似于SQL,但更贴近于Java。在HQL中,我们可以方便地使用聚合函数进行数据处理。例如,如果你想要...
SQLQuery query = session.createSQLQuery(sql); ``` 如果查询返回的是单个对象,我们可以使用`addEntity()`方法指定结果应映射到的实体类: ```java query.addEntity(MyEntity.class); MyEntity result = ...
在这个“hibernate 实践 - Query详解”的主题中,我们将深入理解如何使用Query接口来执行SQL查询,并绑定参数。 1. **Query接口** Query接口是Hibernate提供的一种用于执行HQL(Hibernate查询语言)或SQL查询的API...
《Hibernate中的本地SQL查询SQLQuery》 在Java的持久化框架Hibernate中,有时我们需要使用原生的SQL查询来实现特定的数据库操作,这时就需要利用到SQLQuery接口。本篇文章将详细解析如何使用Hibernate的SQLQuery来...
SQLQuery query = session.createSQLQuery(sql); // 设置参数绑定 query.setParameter("param1", value1); query.setParameter("param2", value2); List[]> result = query.list(); ``` 八、总结 通过XML配置SQL和...
查询数据的方法有两种实现,一种是基于HQL(Hibernate Query Language),另一种是基于原生SQL。 - 基于HQL的通用查询: HQL是Hibernate提供的面向对象的查询语言,可以方便地操作对象和属性。`select`方法接收一个...
在 Hibernate 中,使用 SQLQuery 可以执行 Native SQL 查询,控制查询的执行是通过 SQLQuery 接口进行的,通过执行 Session.createSQLQuery() 获取这个接口。下面将详细介绍如何使用这个 API 进行查询。 标量查询...
8. **查询**: Hibernate提供HQL(Hibernate Query Language)和 Criteria API 来执行查询。例如,用HQL获取所有实体: ```java List<Entity> entities = session.createQuery("from Entity").list(); ``` 9. **...
使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...
1. **HQL(Hibernate Query Language)** HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但操作的对象是对象而非表。例如,要获取所有用户,可以使用以下HQL语句: ```java Query query = session....