<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>杰克，快跑！ &#187; hibernate</title>
	<atom:link href="http://blog.jackrun.com/archives/tag/hibernate/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.jackrun.com</link>
	<description>busy to live or busy to die</description>
	<lastBuildDate>Thu, 05 Aug 2010 05:58:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Hibernate Native SQL查询常用的2种方法及对返回结果处理</title>
		<link>http://blog.jackrun.com/archives/87.html</link>
		<comments>http://blog.jackrun.com/archives/87.html#comments</comments>
		<pubDate>Tue, 14 Nov 2006 01:24:00 +0000</pubDate>
		<dc:creator>Peltason</dc:creator>
				<category><![CDATA[J2EE]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.jackrun.com/?p=87</guid>
		<description><![CDATA[本文使用Hibernate3.2 cr2
1.直接返回List结果集，不包括列名信息
List ls = session.createSQLQuery(querySql).list();
如果当前查询SQL里包括多列，则List里每行存放的是Object数组，如果直接查询的是一列，则每行存放的则直接就是查询的哪一列的数据。
也可以在返回的结果数据里指定每一列的类型
List ls2 = session.createSQLQuery(querySql).addScalar(&#8220;column_name&#8221;, Hibernate.DATE).list();
这样返回的数据的时候Hiberante就会对返回的数据转换成你指定的数据类型.这个是在3.1版本就支持的操作。

2.返回包括列名信息，可以是数据每行转换成一个Map形式。则KEY对应列名，VALUE对应当前列的值。
实现方法如下：
List ls3 = session.createSQLQuery(querySql).setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP).list();
这样返回的结果集每行就是Map(key:column,value:columnValue);还可以使用其他的一些Hibernate定义好的 一些ResultTransformer方法的实现类。具体可以参考 org.hibernate.criterion.CriteriaSpecification里定义的一些。
当然列可以实现自己的数据组装方法，只需要实现ResultTransformer接口就行了。
注意：ResultTransformer实现新版本的Hibernate才支持
以上例子说明的两种方法是没有Hibernate的mapping对象的概念。直接和JDBC返回的结果差不多。
如果想支持返回数据为Hibernate的Entity可以具体参考Hibernate参考文档里的 Native SQL查询一章的实现方法。
]]></description>
			<content:encoded><![CDATA[<p>本文使用Hibernate3.2 cr2</p>
<p>1.直接返回List结果集，不包括列名信息</p>
<p>List ls = session.createSQLQuery(querySql).list();</p>
<p>如果当前查询SQL里包括多列，则List里每行存放的是Object数组，如果直接查询的是一列，则每行存放的则直接就是查询的哪一列的数据。<br />
也可以在返回的结果数据里指定每一列的类型</p>
<p>List ls2 = session.createSQLQuery(querySql).addScalar(&#8220;column_name&#8221;, Hibernate.DATE).list();<br />
这样返回的数据的时候Hiberante就会对返回的数据转换成你指定的数据类型.这个是在3.1版本就支持的操作。</p>
<p><span id="more-87"></span></p>
<p>2.返回包括列名信息，可以是数据每行转换成一个Map形式。则KEY对应列名，VALUE对应当前列的值。<br />
实现方法如下：</p>
<p>List ls3 = session.createSQLQuery(querySql).setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP).list();</p>
<p>这样返回的结果集每行就是Map(key:column,value:columnValue);还可以使用其他的一些Hibernate定义好的 一些ResultTransformer方法的实现类。具体可以参考 org.hibernate.criterion.CriteriaSpecification里定义的一些。<br />
当然列可以实现自己的数据组装方法，只需要实现ResultTransformer接口就行了。<br />
注意：ResultTransformer实现新版本的Hibernate才支持<br />
以上例子说明的两种方法是没有Hibernate的mapping对象的概念。直接和JDBC返回的结果差不多。<br />
如果想支持返回数据为Hibernate的Entity可以具体参考Hibernate参考文档里的 Native SQL查询一章的实现方法。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jackrun.com/archives/87.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
