`
xiang37
  • 浏览: 430884 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

hibernate 的createSQLQuery的几种用法

阅读更多

对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口。最简单的情况下,我们可以采用以下形式:

List cats  =  sess.createSQLQuery( " select * from cats " ).addEntity(Cat. class ).list();

这个查询指定了:

SQL查询字符串

查询返回的实体

这里,结果集字段名被假设为与映射文件中指明的字段名相同。对于连接了多个表的查询,这就可能造成问题,因为可能在多个表中出现同样名字的字段。下面的方法就可以避免字段名重复的问题:

List cats  =  sess.createSQLQuery( " select {cat.*} from cats cat " ).addEntity( " cat " , Cat. class ).list();

这个查询指定了:

SQL查询语句,它带一个占位符,可以让Hibernate使用字段的别名.

查询返回的实体,和它的SQL表的别名.

addEntity()方法将SQL表的别名和实体类联系起来,并且确定查询结果集的形态。

addJoin()方法可以被用于载入其他的实体和集合的关联.

List cats  =  sess.createSQLQuery(
"
 select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id " )
.addEntity(
 " cat " , Cat. class )
.addJoin(
 " kitten "  " cat.kittens " )
.list();

原生的SQL查询可能返回一个简单的标量值或者一个标量和实体的结合体。

Double max  =  (Double) sess.createSQLQuery( " select max(cat.weight) as maxWeight from cats cat " )
.addScalar(
 " maxWeight " , Hibernate.DOUBLE);
.uniqueResult();

除此之外,你还可以在你的hbm文件中描述结果集映射信息,在查询中使用。

List cats  =  sess.createSQLQuery(
"
 select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id " )
.setResultSetMapping(
 " catAndKitten " )
.list();

命名SQL查询
可以在映射文档中定义查询的名字,然后就可以象调用一个命名的HQL查询一样直接调用命名SQL查询.在这种情况下,我们不需要调用addEntity()方法.

< sql - query name = " persons " > 
 
 < return  alias = " person "   class = " eg.Person " /> 
 Select person.NAME AS {person.name},person.AGE AS {person.age},person.SEX AS {person.sex} FROM PERSON person Where person.NAME LIKE :namePattern
</ sql - query >

List people  =  sess.getNamedQuery( " persons " ).setString( " namePattern " , namePattern)
.setMaxResults(
 50 )
.list();

分享到:
评论

相关推荐

    hibernate 执行原生sql的几种方式

    本篇文章将详细介绍在Hibernate中执行原生SQL的几种方式,以及它们各自的适用场景和优缺点。 1. **使用`Session.createSQLQuery()`** Hibernate的`Session`接口提供了`createSQLQuery()`方法,允许我们直接编写SQL...

    HibernateDemo(hibernate基本用法演示)

    学习 Hibernate 的基础用法,主要涵盖以下几个方面: 1. **配置**:创建 `hibernate.cfg.xml` 配置文件,指定数据库连接信息、方言、缓存策略等。也可以使用 Java 配置方式进行配置。 2. **实体映射**:定义实体类...

    Hibernate连表查询 Hibernate连表查询

    例如,在`findAllbyString`方法中,使用了`getSession().createSQLQuery`方法来执行原生SQL查询: ```java String queryString = "Select * from h_attribute t where ciid=24 and Isinstance=1 and Isdisplay=1"; ...

    hibernate多表联合查询

    在Hibernate中,可以使用以下几种方式来实现多表联合查询: - **HQL (Hibernate Query Language)** - **Criteria API** - **Native SQL** 本文将重点介绍如何使用HQL和Native SQL来实现多表联合查询。 #### 三、...

    Hibernate查询解决方案

    本文将详细介绍 Hibernate 提供的几种查询方式及其应用场景。 #### 二、重要知识点 ##### 1. Session 对象与查询操作 在 Hibernate 中,所有持久化操作都需要通过 Session 对象来完成,包括查询操作。Session ...

    HQL是hibernate自己的一套查询

    根据提供的标题、描述以及部分代码内容,我们可以了解到这段材料主要涉及的是Hibernate框架中的HQL(Hibernate Query Language)查询语言的使用。接下来将详细介绍HQL的相关知识点。 ### HQL概述 HQL是Hibernate...

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

    本文将详细介绍如何解决这一问题,并提供几种有效的解决方案。 #### 问题背景 Hibernate是Java平台下的一款优秀对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互过程。然而,在使用...

    Hibernate中使用Access

    5. **HQL与SQL查询**: Hibernate提供了自己的查询语言HQL,但Access支持的SQL特性有限,因此可能需要编写原生SQL查询并使用`Session`的`createSQLQuery()`方法执行。 6. **优化与注意事项**: 由于Access的性能和...

    Hibernate+sqlserver2000分页

    这通常涉及到在HQL中嵌入SQL片段,或者使用`createSQLQuery`方法直接执行SQL查询。同时,别忘了映射查询结果到对应的Java对象。 4. **max分页**: 提到的`max分页`可能是指在某些场景下,我们需要知道总共有多少页...

    hibernate增删改查

    `find()`方法可以进行简单的SQL查询,而`createQuery()`和`createSQLQuery()`则支持更复杂的HQL(Hibernate Query Language)和原生SQL查询。 7. **事务管理**:在执行增删改查操作时,通常需要包裹在事务中以确保...

    hibernate语句大全

    以上介绍了Hibernate中几种常见的查询方式,包括HQL、QBC、原生SQL以及一些高级查询技巧如分组、排序等。掌握这些基本操作可以帮助开发者更高效地使用Hibernate框架进行数据访问操作。随着实践经验的积累,还可以...

    hibernate的HQL的jar

    4. **查询**:使用Session的createQuery或createSQLQuery方法创建HQL或SQL查询,然后设置参数并执行。 5. **结果处理**:HQL查询返回的结果可以是List对象,其中包含了查询结果对应的Java对象。 总的来说,...

    hibernate分页查询

    Hibernate分页查询基于SQL的LIMIT和OFFSET子句,通过Session的createQuery或createSQLQuery方法创建查询,并设置FirstResult和MaxResults属性来实现分页。FirstResult表示从结果集的第几个元素开始获取,MaxResults...

    4.Hibernate-04查询以及优化策略1

    下面是几种常见的查询优化策略: 4.1 使用缓存 Hibernate 提供了多种缓存机制,例如一级缓存、二级缓存和查询缓存等。这些缓存机制可以显著地提高查询性能。 4.2 优化 HQL 查询 HQL 查询可以通过使用索引、限制...

    hibernate sql案例

    在使用Hibernate执行SQL查询时,我们通常有以下几种方式: 1. HQL(Hibernate Query Language):这是Hibernate专有的查询语言,语法类似于SQL,但面向对象。例如,我们可以用`from Customer`来获取所有Customer...

    Hibernate的char问题.txt

    针对上述问题,可以采取以下几种解决策略: ##### 1. 正确配置 Hibernate 映射文件 确保在 Hibernate 的映射文件(如 `.hbm.xml`)或注解中明确指定 `char` 类型字段的映射规则。例如,可以使用 `&lt;property&gt;` 元素...

    hibernate 持久层优化

    - **`jdbcTemplate.queryForList`**:通常用于执行JDBC级别的查询,效率介于上述几种方法之间。 在实际应用中,可以根据具体的查询需求选择最合适的查询方式,以达到最优的性能。 #### 四、选择正确的批量处理方法...

    Hibernate教程

    Hibernate 包含以下几个主要组件: 1. **Configuration**:负责读取配置文件,初始化SessionFactory。 2. **SessionFactory**:是所有Session的工厂,它是一个线程安全的类,应用中只需要一个SessionFactory实例。 ...

Global site tag (gtag.js) - Google Analytics