命名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();
<return-join>
和
<load-collection>
元素是用来连接关联以及将查询定义为预先初始化各个集合的。
<sql-query name="personsWith">
<return alias="person" class="eg.Person"/>
<return-join alias="address" property="person.mailingAddress"/>
SELECT person.NAME AS {person.name},
person.AGE AS {person.age},
person.SEX AS {person.sex},
adddress.STREET AS {address.street},
adddress.CITY AS {address.city},
adddress.STATE AS {address.state},
adddress.ZIP AS {address.zip}
FROM PERSON person
JOIN ADDRESS adddress
ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'
WHERE person.NAME LIKE :namePattern
</sql-query>
一个命名查询可能会返回一个标量值.你必须使用<return-scalar>
元素来指定字段的别名和
Hibernate类型
<sql-query name="mySqlQuery">
<return-scalar column="name" type="string"/>
<return-scalar column="age" type="long"/>
SELECT p.NAME AS name,
p.AGE AS age,
FROM PERSON p WHERE p.NAME LIKE 'Hiber%'
</sql-query>
你可以把结果集映射的信息放在外部的<resultset>
元素中,这样就可以在多个命名查询间,或者通过setResultSetMapping()
API来访问。(此处原文即存疑。原文为:You can externalize the resultset mapping informations in a
<resultset>
element to either reuse them accross
several named queries or through the
setResultSetMapping()
API.)
<resultset name="personAddress">
<return alias="person" class="eg.Person"/>
<return-join alias="address" property="person.mailingAddress"/>
</resultset>
<sql-query name="personsWith" resultset-ref="personAddress">
SELECT person.NAME AS {person.name},
person.AGE AS {person.age},
person.SEX AS {person.sex},
adddress.STREET AS {address.street},
adddress.CITY AS {address.city},
adddress.STATE AS {address.state},
adddress.ZIP AS {address.zip}
FROM PERSON person
JOIN ADDRESS adddress
ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'
WHERE person.NAME LIKE :namePattern
</sql-query>
另外,你可以在java代码中直接使用hbm文件中的结果集定义信息。
List cats = sess.createSQLQuery(
"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id"
)
.setResultSetMapping("catAndKitten")
.list();
使用return-property来明确地指定字段/别名
使用<return-property>
你可以明确的告诉Hibernate使用哪些字段别名,这取代了使用{}
-语法
来让Hibernate注入它自己的别名.
<sql-query name="mySqlQuery">
<return alias="person" class="eg.Person">
<return-property name="name" column="myName"/>
<return-property name="age" column="myAge"/>
<return-property name="sex" column="mySex"/>
</return>
SELECT person.NAME AS myName,
person.AGE AS myAge,
person.SEX AS mySex,
FROM PERSON person WHERE person.NAME LIKE :name
</sql-query>
<return-property>
也可用于多个字段,它解决了使用
{}
-语法不能细粒度控制多个字段的限制
<sql-query name="organizationCurrentEmployments">
<return alias="emp" class="Employment">
<return-property name="salary">
<return-column name="VALUE"/>
<return-column name="CURRENCY"/>
</return-property>
<return-property name="endDate" column="myEndDate"/>
</return>
SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer},
STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate},
REGIONCODE as {emp.regionCode}, EID AS {emp.id}, VALUE, CURRENCY
FROM EMPLOYMENT
WHERE EMPLOYER = :id AND ENDDATE IS NULL
ORDER BY STARTDATE ASC
</sql-query>
注意在这个例子中,我们使用了<return-property>
结合{}
的注入语法.
允许用户来选择如何引用字段以及属性.
如果你映射一个识别器(discriminator),你必须使用<return-discriminator>
来指定识别器字段
Hibernate 3引入了对存储过程查询(stored procedure)和函数(function)的支持.以下的说明中,这二者一般都适用。
存储过程/函数必须返回一个结果集,作为Hibernate能够使用的第一个外部参数.
下面是一个Oracle9和更高版本的存储过程例子.
CREATE OR REPLACE FUNCTION selectAllEmployments
RETURN SYS_REFCURSOR
AS
st_cursor SYS_REFCURSOR;
BEGIN
OPEN st_cursor FOR
SELECT EMPLOYEE, EMPLOYER,
STARTDATE, ENDDATE,
REGIONCODE, EID, VALUE, CURRENCY
FROM EMPLOYMENT;
RETURN st_cursor;
END;
在Hibernate里要要使用这个查询,你需要通过命名查询来映射它.
<sql-query name="selectAllEmployees_SP" callable="true">
<return alias="emp" class="Employment">
<return-property name="employee" column="EMPLOYEE"/>
<return-property name="employer" column="EMPLOYER"/>
<return-property name="startDate" column="STARTDATE"/>
<return-property name="endDate" column="ENDDATE"/>
<return-property name="regionCode" column="REGIONCODE"/>
<return-property name="id" column="EID"/>
<return-property name="salary">
<return-column name="VALUE"/>
<return-column name="CURRENCY"/>
</return-property>
</return>
{ ? = call selectAllEmployments() }
</sql-query>
注意存储过程当前仅仅返回标量和实体.现在不支持<return-join>
和<load-collection>
为了在Hibernate中使用存储过程,你必须遵循一些规则.不遵循这些规则的存储过程将不可用.如果你仍然想要使用他们,
你必须通过session.connection()
来执行他们.这些规则针对于不同的数据库.因为数据库
提供商有各种不同的存储过程语法和语义.
对存储过程进行的查询无法使用setFirstResult()/setMaxResults()
进行分页。
建议采用的调用方式是标准SQL92: { ? = call
functionName(<parameters>) }
或者 { ? = call
procedureName(<parameters>}
.原生调用语法不被支持。
对于Oracle有如下规则:
对于Sybase或者MS SQL server有如下规则:
分享到:
相关推荐
《Hibernate_3.2.0中文手册》是Java开发者的重要参考资料,它详尽地阐述了Hibernate框架在3.2.0版本中的各项功能和用法。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发人员使用面向对象的编程模型来...
《Hibernate_3.2.0中文参考》是针对Java开发者的重要资源,它详细阐述了Hibernate 3.2.0版本的特性和用法。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发人员使用面向对象的编程模型来操作数据库,而...
《Hibernate 3.2.0 参考指南中文版》是Java开发人员深入理解Hibernate ORM框架的重要参考资料。Hibernate是一款开源的对象关系映射(ORM)工具,它为Java开发者提供了便捷的方式来管理数据库操作,使得开发者无需...
Hibernate是一个面向Java环境的对象...Hibernate不仅仅管理Java类到数据库表的映射(包括Java数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
hibernate-3.2.0源码和hibernate-3.2.0所有的jar包。
hibernate 3.2.0 API.CHM,hibernate中文参考手册.CHM,JS5.5完全参考.CHM,Linux C 函数 使用手册.CHM, Linux命令大全(修改版).CHM,MFC类库详解.CHM,MySQL 5.1 中文手册.CHM,MySQL中文手册3.1.CHM,NHibernate文档.CHM,...
Hibernate3.2.0中文手册,学习和使用Hibernate的必备手册。
《Hibernate 3.2.0 参考指南中文版》是Java开发人员的重要参考资料,它详细阐述了Hibernate框架在3.2.0版本中的各种功能和使用方法。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式...
通过深入学习Hibernate 3.2.0 的中文官方文档,开发者可以掌握这个强大ORM框架的使用,提升Java数据库应用开发的水平。文档通常包含详细的示例、解释和API参考,是学习和解决问题的重要参考资料。
《Hibernate_3.2.0_官方参考手手册》是一份详尽的指南,涵盖了Hibernate 3.2.0版本的各个方面。Hibernate是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以更加专注于业务逻辑...
《Hibernate_3.2.0_Reference中文版》是关于Hibernate框架的重要参考资料,它详细阐述了Hibernate 3.2.0版本的功能、用法以及最佳实践。Hibernate是一个流行的Java持久化框架,它简化了数据库与Java对象之间的交互,...
《Hibernate 3.2.0 中文帮助文档》是一份极其宝贵的资源,它详细阐述了Hibernate 3.2.0版本的核心特性和使用方法。Hibernate是Java开发领域中广泛使用的对象关系映射(ORM)框架,它允许开发者用面向对象的方式来...
3. **Hibernate参考文档**:`Hibernate_3.2.0_Reference_zh_CN.chm`和`hibernate_reference3.1.2.pdf`是Hibernate不同版本的中文参考手册,包含了详细的功能介绍、配置说明和使用示例。学习这些文档可以帮助开发者...
《Hibernate_3.2.0帮助手册》是一个关于Hibernate框架的详细参考资料,主要针对的是Hibernate 3.2.0版本。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作,使得...
《Hibernate 3.2.0 参考指南中文版》是一个详尽的资源,涵盖了Java对象关系映射框架Hibernate的核心概念和技术。这个压缩包包含了针对Hibernate 3.2.0版本的完整参考文档,旨在帮助开发者更好地理解和使用这一强大的...
**标题解析:**"Hibernate_3.2.0_...通过阅读"Hibernate_3.2.0_Reference_zh_CN.chm"这个中文参考手册,开发者可以深入了解以上这些概念,学习如何在实际项目中使用Hibernate来构建高效、健壮的数据库驱动的应用程序。
### Hibernate Annotations 中文参考手册概览 #### 版本说明 根据提供的信息,这份文档的版本为3.2.0CR1。此版本标志着Hibernate框架中的一个特定阶段,特别是关于如何利用注解(Annotations)来简化Java对象与...