<?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/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>Narcanti &#187; Hibernate</title>
	<atom:link href="http://narcanti.keyboardsamurais.de/category/computer/java/hibernate/feed" rel="self" type="application/rss+xml" />
	<link>http://narcanti.keyboardsamurais.de</link>
	<description>deep geeks click here</description>
	<lastBuildDate>Tue, 30 Mar 2010 10:16:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Hibernate Data View Objects Annotations</title>
		<link>http://narcanti.keyboardsamurais.de/hibernate-data-view-objects-annotations.html</link>
		<comments>http://narcanti.keyboardsamurais.de/hibernate-data-view-objects-annotations.html#comments</comments>
		<pubDate>Sun, 28 Mar 2010 18:45:50 +0000</pubDate>
		<dc:creator>Secco</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://narcanti.keyboardsamurais.de/?p=435</guid>
		<description><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/>In my last article Hibernate Data View Objects I showed some basic ideas, of how filling up view objects can be done with the help of hibernate in a more or less automatic way. Meanwhile I created some little API classes, that can be used to annotate view objects. The basic of this partly worked [...]]]></description>
			<content:encoded><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/><p>In my last article <a href="http://narcanti.keyboardsamurais.de/hibernate-dataviewobjects.html">Hibernate Data View Objects</a> I showed some basic ideas, of how filling up view objects can be done with the help of hibernate in a more or less automatic way.<br />
Meanwhile I created some little API classes, that can be used to annotate view objects.<br />
<span id="more-435"></span></p>
<p>The basic of this partly worked out API is a simple DAO used to load and fill the view objects. (Please forgive me the german comments and todos)</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> DtoDao <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">List</span> loadDtos<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Class</span> dtoClass, Criterion criterion<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// TODO: query by exmaple</span>
	<span style="color: #666666; font-style: italic;">// aber hierzu müssen die dto-properties auf entity-properties zurück gemappt werden</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Also there is need of an implementation (of course). (You may recognize some spring-bean interface methods as well as the Hql/Criteria to SQL translator class from one of my previous posts for logging purposes of the generated SQL code.)<br />
This class does the part of the work, where a &#8220;query-path&#8221; is translated to a hibernate criteria.<br />
Also the dao implementation checks and registers the given class into a custom entity manager, the dvo entity manager, which analyses the annotations and creates the neccessary meta data for the dvo class.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DvoDaoImpl <span style="color: #000000; font-weight: bold;">implements</span> DvoDao, InitializingBean<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> Log LOG <span style="color: #339933;">=</span> LogFactory.<span style="color: #006633;">getLog</span><span style="color: #009900;">&#40;</span>DvoDaoImpl.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> HqlToSqlTranslator translator<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> SessionFactory sessionFactory<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> DvoEntityManager entityManager <span style="color: #339933;">=</span> DvoEntityManager.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	@Transactional<span style="color: #009900;">&#40;</span>isolation<span style="color: #339933;">=</span>Isolation.<span style="color: #006633;">READ_COMMITTED</span>, propagation<span style="color: #339933;">=</span>Propagation.<span style="color: #006633;">REQUIRED</span>, readOnly<span style="color: #339933;">=</span><span style="color: #000066; font-weight: bold;">true</span>, rollbackFor<span style="color: #339933;">=</span><span style="color: #003399;">Exception</span>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">List</span> loadDvos<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Class</span> dvoClass, Criterion criterion<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> loadDvos<span style="color: #009900;">&#40;</span>entityManager.<span style="color: #006633;">getMetaByDvo</span><span style="color: #009900;">&#40;</span>dvoClass<span style="color: #009900;">&#41;</span>, criterion<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">List</span> loadDvos<span style="color: #009900;">&#40;</span>DvoEntityMeta meta, Criterion criterion<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">/**/</span>
		<span style="color: #666666; font-style: italic;">// TODO: optimieren: wenn mehrere attribute einer aggregation (z.b. x.y.id und x.y.name) benutzt werden,</span>
		<span style="color: #666666; font-style: italic;">// dann sollen nicht zwei joins erzeugt werden</span>
		<span style="color: #000000; font-weight: bold;">final</span> Criteria criteria <span style="color: #339933;">=</span> sessionFactory.<span style="color: #006633;">getCurrentSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">createCriteria</span><span style="color: #009900;">&#40;</span>meta.<span style="color: #006633;">getEntityClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;d&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// es werden zwei informationen von der meta benötigt:</span>
		<span style="color: #666666; font-style: italic;">// 1. welche felder sollen in der query geladen werden</span>
		<span style="color: #666666; font-style: italic;">// 2. in welche properties sollen die daten gespeichert werden</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// beispiel:</span>
		<span style="color: #666666; font-style: italic;">// dlrListDvoPropertiesByAlias.put(&quot;customerName&quot;, &quot;referencedMTMessage.customer.name&quot;);</span>
		<span style="color: #666666; font-style: italic;">// bedeutet, dass die dvo-property &quot;customerName&quot; mit den daten aus &quot;referencedMTMessage.customer.name&quot;</span>
		<span style="color: #666666; font-style: italic;">// befüllt werden soll.</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// der query-teil (&quot;referencedMTMessage.customer.name&quot;) muss gesplittet und mit joins in die abfrage integriert werden.</span>
		<span style="color: #666666; font-style: italic;">// auch muss der index jedes feldes nachgehalten werden, da das resultset nur über indizes einzelne kolumnen liefert</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">final</span> Map<span style="color: #339933;">&lt;</span>String, String<span style="color: #339933;">&gt;</span> propertyToQueryMappings <span style="color: #339933;">=</span> meta.<span style="color: #006633;">getDvoPropertiesToQueryPaths</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;propertyToQueryMappings=&quot;</span><span style="color: #339933;">+</span>propertyToQueryMappings<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #666666; font-style: italic;">// property -&gt; index in resultset</span>
		<span style="color: #000000; font-weight: bold;">final</span> HashMap<span style="color: #339933;">&lt;</span>String, Integer<span style="color: #339933;">&gt;</span> columnMappingsByIndex <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HashMap<span style="color: #339933;">&lt;</span>String, Integer<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// key -&gt; ag_referencedMTMessage.country, value -&gt; ag_referencedMTMessage_country</span>
		<span style="color: #666666; font-style: italic;">// LEFT JOIN ag_referencedMTMessage.country AS ag_referencedMTMessage_country</span>
		<span style="color: #000000; font-weight: bold;">final</span> HashMap<span style="color: #339933;">&lt;</span>String, String<span style="color: #339933;">&gt;</span> aggregations <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HashMap<span style="color: #339933;">&lt;</span>String, String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">final</span> ProjectionList projections <span style="color: #339933;">=</span> Projections.<span style="color: #006633;">projectionList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000066; font-weight: bold;">int</span> maxAggregationDeepth <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// maximale anzahl aggregationen bei allen querypaths</span>
		<span style="color: #000066; font-weight: bold;">int</span> propertyColumnIndex <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// index der property in resultset</span>
&nbsp;
		<span style="color: #003399;">String</span> queryPath<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// querypath der aktuellen property</span>
		<span style="color: #000066; font-weight: bold;">int</span> aggregationDeepth<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// anzahl aggregationen im querypath der aktuellen property</span>
		<span style="color: #000000; font-weight: bold;">final</span> ArrayList<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> aggregationParts <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// querypath der aktuellen property zerstueckelt</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> property<span style="color: #339933;">:</span>propertyToQueryMappings.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			queryPath <span style="color: #339933;">=</span> propertyToQueryMappings.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>property<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// zur ermittlung der aggregationen</span>
			aggregationDeepth <span style="color: #339933;">=</span> StringUtil.<span style="color: #006633;">occurences</span><span style="color: #009900;">&#40;</span>queryPath, <span style="color: #0000ff;">'.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;property=&quot;</span><span style="color: #339933;">+</span>property<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;, queryPath=&quot;</span><span style="color: #339933;">+</span>queryPath<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;, aggregationDeepth=&quot;</span><span style="color: #339933;">+</span>aggregationDeepth<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>aggregationDeepth<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #666666; font-style: italic;">// keine aggregation</span>
				<span style="color: #666666; font-style: italic;">// state -&gt; d.state</span>
				projections.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>Projections.<span style="color: #006633;">property</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;d.&quot;</span><span style="color: #339933;">+</span>queryPath<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;  adding direct property projection d.&quot;</span><span style="color: #339933;">+</span>queryPath<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
				maxAggregationDeepth <span style="color: #339933;">=</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">max</span><span style="color: #009900;">&#40;</span>maxAggregationDeepth, aggregationDeepth<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #666666; font-style: italic;">// aggregationen vorhanden</span>
				<span style="color: #666666; font-style: italic;">// alle abarbeiten</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// erst alle teile ermitteln</span>
				aggregationParts.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				CollectionSplitter.<span style="color: #006633;">toList</span><span style="color: #009900;">&#40;</span>aggregationParts, queryPath, <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>.&quot;</span>, <span style="color: #000066; font-weight: bold;">true</span>, <span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;  aggregationParts=&quot;</span><span style="color: #339933;">+</span>aggregationParts<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// beispiele für aggregationen:</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// customer.id -&gt; ag_customer.id + LEFT JOIN d.customer AS ag_customer</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// referencedMTMessage.country.iso3166</span>
				<span style="color: #666666; font-style: italic;">// -&gt; ag_referencedMTMessage_country.iso3166</span>
				<span style="color: #666666; font-style: italic;">// + LEFT JOIN d.referencedMTMessage AS ag_referencedMTMessage</span>
				<span style="color: #666666; font-style: italic;">// + LEFT JOIN ag_referencedMTMessage.country AS ag_referencedMTMessage_country</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// Es gibt also 3 verschiedene Positionen, an denen ein queryPath-Teil stehen kann:</span>
				<span style="color: #666666; font-style: italic;">// 1. am anfang. Dann handelt es sich um ein attribut der domain</span>
				<span style="color: #666666; font-style: italic;">//	hier muss ein join erzeugt werden, weil weitere attribute folgen (mindestens ein weiteres, dass das projection attribut des joins darstellt) </span>
				<span style="color: #666666; font-style: italic;">// 2. am ende. dann handelt es sich um ein attribut der zuletzt erzeugten aggregation (z.b. ag_referencedMTMessage_country.iso3166)</span>
				<span style="color: #666666; font-style: italic;">//	hier braucht nichts mehr gejoint zu werden, sondern das attribut muss als projektion hinzugefügt werden</span>
				<span style="color: #666666; font-style: italic;">// 3. in der mitte. dann handelt es sich um ein attribut der zuletzt erzeugten aggregation, die aber</span>
				<span style="color: #666666; font-style: italic;">// 	gejoint werden muss, weil weitere attribute folgen</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// letzte aggregation</span>
				<span style="color: #003399;">String</span> lastAggregationName <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
				<span style="color: #003399;">String</span> currentAggregationPart, currentAggregationName<span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// es gibt hier mindestens zwei aggregationParts</span>
				<span style="color: #666666; font-style: italic;">// erster teil beschreibt attribut von domain, also z.b. d.customer</span>
				<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> aggregationIndex<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> aggregationIndex<span style="color: #339933;">&lt;=</span>aggregationDeepth<span style="color: #339933;">;</span> aggregationIndex<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					currentAggregationPart <span style="color: #339933;">=</span> aggregationParts.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>aggregationIndex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
						LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;    checking aggregationIndex=&quot;</span><span style="color: #339933;">+</span>aggregationIndex<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;, part=&quot;</span><span style="color: #339933;">+</span>currentAggregationPart<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
					<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>aggregationIndex<span style="color: #339933;">==</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// entspricht &quot;LEFT JOIN d.referencedMTMessage AS ag_referencedMTMessage&quot;</span>
						lastAggregationName <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;ag_&quot;</span><span style="color: #339933;">+</span>currentAggregationPart<span style="color: #339933;">;</span>
						aggregations.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;d.&quot;</span><span style="color: #339933;">+</span>currentAggregationPart, lastAggregationName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
					<span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>aggregationIndex<span style="color: #339933;">==</span>aggregationDeepth<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// letzter teil beschreibt das endliche attribut, dass zur projektion hinzukommt</span>
						projections.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>Projections.<span style="color: #006633;">property</span><span style="color: #009900;">&#40;</span>lastAggregationName<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;.&quot;</span><span style="color: #339933;">+</span>currentAggregationPart<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
							LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;    last aggregation part found: adding projection &quot;</span><span style="color: #339933;">+</span>lastAggregationName<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;.&quot;</span><span style="color: #339933;">+</span>currentAggregationPart<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						<span style="color: #009900;">&#125;</span>
					<span style="color: #009900;">&#125;</span>
					<span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// mitten drin</span>
						<span style="color: #666666; font-style: italic;">// entspricht &quot;LEFT JOIN ag_referencedMTMessage.country AS ag_referencedMTMessage_country&quot;</span>
						currentAggregationName <span style="color: #339933;">=</span> lastAggregationName<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;_&quot;</span><span style="color: #339933;">+</span>currentAggregationPart<span style="color: #339933;">;</span>
						aggregations.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>lastAggregationName<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;.&quot;</span><span style="color: #339933;">+</span>currentAggregationPart, currentAggregationName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
							LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;    middle aggregation part found: adding aggregation &quot;</span><span style="color: #339933;">+</span>lastAggregationName<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;.&quot;</span><span style="color: #339933;">+</span>currentAggregationPart<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot; -&gt; &quot;</span><span style="color: #339933;">+</span>currentAggregationName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						<span style="color: #009900;">&#125;</span>
						lastAggregationName <span style="color: #339933;">=</span> currentAggregationName<span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			columnMappingsByIndex.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>property, propertyColumnIndex<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// wenn aggregationen vorhanden sind, dann einfügen</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>maxAggregationDeepth<span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// aggregationen (joins)</span>
			<span style="color: #666666; font-style: italic;">// nach länge sortieren</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;building aggregations&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">final</span> List<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> aggregationsSizeSorted <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span>aggregations.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">Collections</span>.<span style="color: #006633;">sort</span><span style="color: #009900;">&#40;</span>aggregationsSizeSorted, <span style="color: #000000; font-weight: bold;">new</span> StringLengthComparator<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;aggregations (sorted): &quot;</span><span style="color: #339933;">+</span>aggregationsSizeSorted<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> fromAggregation<span style="color: #339933;">:</span>aggregationsSizeSorted<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				criteria.<span style="color: #006633;">createAlias</span><span style="color: #009900;">&#40;</span>fromAggregation, aggregations.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>fromAggregation<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// projektionen</span>
		criteria.<span style="color: #006633;">setProjection</span><span style="color: #009900;">&#40;</span>projections<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>criterion<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			criteria.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>criterion<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> 
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>translator<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;created query: &quot;</span><span style="color: #339933;">+</span>translator.<span style="color: #006633;">toSql</span><span style="color: #009900;">&#40;</span>criteria<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;columnmappings: &quot;</span><span style="color: #339933;">+</span>columnMappingsByIndex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// nun abfrage ausführen und dvofactory zum erzeugen der dvos benutzen</span>
		<span style="color: #000000; font-weight: bold;">final</span> HibernateBuildByRowScrollAction scrollAction <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DvoBuildByRowScrollActionImpl<span style="color: #009900;">&#40;</span>meta, columnMappingsByIndex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">return</span> loadByScroll<span style="color: #009900;">&#40;</span>scrollAction, criteria<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@SuppressWarnings<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;unchecked&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #003399;">List</span> loadByScroll<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> HibernateBuildByRowScrollAction scrollAction, <span style="color: #000000; font-weight: bold;">final</span> Criteria criteria<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">ArrayList</span> data <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		ScrollableResults result <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>scrollAction.<span style="color: #006633;">getCacheMode</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				criteria.<span style="color: #006633;">setCacheMode</span><span style="color: #009900;">&#40;</span>scrollAction.<span style="color: #006633;">getCacheMode</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>scrollAction.<span style="color: #006633;">getLockMode</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				criteria.<span style="color: #006633;">setLockMode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;d&quot;</span>, scrollAction.<span style="color: #006633;">getLockMode</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>scrollAction.<span style="color: #006633;">getScrollMode</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				result <span style="color: #339933;">=</span> criteria.<span style="color: #006633;">scroll</span><span style="color: #009900;">&#40;</span>scrollAction.<span style="color: #006633;">getScrollMode</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
				result <span style="color: #339933;">=</span> criteria.<span style="color: #006633;">scroll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #003399;">Object</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> rowdata<span style="color: #339933;">;</span>
			<span style="color: #003399;">Object</span> resultObject<span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>result.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				rowdata <span style="color: #339933;">=</span> result.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				resultObject <span style="color: #339933;">=</span> scrollAction.<span style="color: #006633;">build</span><span style="color: #009900;">&#40;</span>rowdata<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>resultObject<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					data.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>resultObject<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">finally</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>result<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				result.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> data<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setHqlToSqlTranslator<span style="color: #009900;">&#40;</span>HqlToSqlTranslator translator<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">translator</span> <span style="color: #339933;">=</span> translator<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setSessionFactory<span style="color: #009900;">&#40;</span>SessionFactory sessionFactory<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">sessionFactory</span> <span style="color: #339933;">=</span> sessionFactory<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> afterPropertiesSet<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>sessionFactory<span style="color: #339933;">==</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">NullPointerException</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;sessionFactory not set&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>The dao implementation uses some few helper classes, which interact with the annotations as well as with the beans itself.<br />
At first place there is a class holding the meta data for a view object:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DvoEntityMeta <span style="color: #009900;">&#123;</span>
	@SuppressWarnings<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;unused&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> Log LOG <span style="color: #339933;">=</span> LogFactory.<span style="color: #006633;">getLog</span><span style="color: #009900;">&#40;</span>DvoEntityMeta.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> HashMap<span style="color: #339933;">&lt;</span>String, String<span style="color: #339933;">&gt;</span> dvoPropertiesToQueryPaths <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HashMap<span style="color: #339933;">&lt;</span>String, String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">Class</span> entityClass<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">Class</span> dvoClass<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> DvoEntityMeta<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Class</span> entityClass, <span style="color: #000000; font-weight: bold;">Class</span> dvoClass<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#40;</span>entityClass, dvoClass, <span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> DvoEntityMeta<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Class</span> entityClass, <span style="color: #000000; font-weight: bold;">Class</span> dvoClass, <span style="color: #000066; font-weight: bold;">boolean</span> useSimplePropertyMapping<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">entityClass</span> <span style="color: #339933;">=</span> entityClass<span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">dvoClass</span> <span style="color: #339933;">=</span> dvoClass<span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>useSimplePropertyMapping<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #666666; font-style: italic;">// My custom BeanUtil class extracts all bean-method names from the given class,</span>
				<span style="color: #666666; font-style: italic;">// excluding methods like &quot;getClass()&quot;.</span>
				<span style="color: #000000; font-weight: bold;">final</span> Collection<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> properties <span style="color: #339933;">=</span> BeanUtil.<span style="color: #006633;">getPropertyNamesFilteredFromClass</span><span style="color: #009900;">&#40;</span>dvoClass<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> property<span style="color: #339933;">:</span>properties<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					dvoPropertiesToQueryPaths.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>property, property<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e <span style="color: #000000; font-weight: bold;">instanceof</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#41;</span> e<span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
					<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">RuntimeException</span> r <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					r.<span style="color: #006633;">setStackTrace</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000000; font-weight: bold;">throw</span> r<span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">Class</span> getDvoClass<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> dvoClass<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">Class</span> getEntityClass<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> entityClass<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> Map<span style="color: #339933;">&lt;</span>String, String<span style="color: #339933;">&gt;</span> getDvoPropertiesToQueryPaths<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> dvoPropertiesToQueryPaths<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getQueryPathForDvoProperty<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> dvoProperty<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> dvoPropertiesToQueryPaths.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>dvoProperty<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> addDvoPropertiesToQueryPaths<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> dvoProperty, <span style="color: #003399;">String</span> queryPath<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		dvoPropertiesToQueryPaths.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>dvoProperty, queryPath<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> toString<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;dvoClass=&quot;</span><span style="color: #339933;">+</span>dvoClass.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;, domainClass=&quot;</span><span style="color: #339933;">+</span>entityClass.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;, properties=&quot;</span><span style="color: #339933;">+</span>dvoPropertiesToQueryPaths<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Then there is the dvo entity manager, which is used to analyse and organize all annotated dvo classes in a singleton.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DvoEntityManager <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> Log LOG <span style="color: #339933;">=</span> LogFactory.<span style="color: #006633;">getLog</span><span style="color: #009900;">&#40;</span>DvoEntityManager.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> DvoEntityManager INSTANCE <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DvoEntityManager<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> HashMap<span style="color: #339933;">&lt;</span>Class, DvoEntityMeta<span style="color: #339933;">&gt;</span> entityMetaByDvoClass <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HashMap<span style="color: #339933;">&lt;</span>Class, DvoEntityMeta<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> DvoEntityManager<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;creating dvo entity manager&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> DvoEntityManager getInstance<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> INSTANCE<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> isDvo<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> o<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>o<span style="color: #339933;">==</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> isDvo<span style="color: #009900;">&#40;</span>o.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@SuppressWarnings<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;unchecked&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> isDvo<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Class</span> cls<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>cls<span style="color: #339933;">==</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> cls.<span style="color: #006633;">getAnnotation</span><span style="color: #009900;">&#40;</span>DvoAnnotation.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@SuppressWarnings<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;unchecked&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> registerDvo<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Class</span> dvo<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;registering &quot;</span><span style="color: #339933;">+</span>dvo.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>isDvo<span style="color: #009900;">&#40;</span>dvo<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span>entityMetaByDvoClass.<span style="color: #006633;">containsKey</span><span style="color: #009900;">&#40;</span>dvo<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			DvoAnnotation dvoAnnotation <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>DvoAnnotation<span style="color: #009900;">&#41;</span> dvo.<span style="color: #006633;">getAnnotation</span><span style="color: #009900;">&#40;</span>DvoAnnotation.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">final</span> DvoEntityMeta meta <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DvoEntityMeta<span style="color: #009900;">&#40;</span>dvoAnnotation.<span style="color: #006633;">rootDomainClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, dvo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// erzeugen einer entsprechenden meta-data</span>
			<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">Method</span> methods <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> dvo.<span style="color: #006633;">getDeclaredMethods</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">boolean</span> defaultPropertyMapping <span style="color: #339933;">=</span> dvoAnnotation.<span style="color: #006633;">defaultPropertyMapping</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
			DvoPropertyAnnotation dvoPropertyAnnotation<span style="color: #339933;">;</span>
			<span style="color: #003399;">String</span> propertyName<span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">Method</span> method<span style="color: #339933;">:</span>methods<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				propertyName <span style="color: #339933;">=</span> BeanUtil.<span style="color: #006633;">getPropertyName</span><span style="color: #009900;">&#40;</span>method<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				dvoPropertyAnnotation <span style="color: #339933;">=</span> method.<span style="color: #006633;">getAnnotation</span><span style="color: #009900;">&#40;</span>DvoPropertyAnnotation.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>dvoPropertyAnnotation<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					meta.<span style="color: #006633;">addDvoPropertiesToQueryPaths</span><span style="color: #009900;">&#40;</span>propertyName, dvoPropertyAnnotation.<span style="color: #006633;">attributePath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>defaultPropertyMapping <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #0000ff;">&quot;class&quot;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>propertyName<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> method.<span style="color: #006633;">getAnnotation</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Transient</span>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>propertyName.<span style="color: #006633;">startsWith</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;get&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> propertyName.<span style="color: #006633;">startsWith</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;set&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> propertyName.<span style="color: #006633;">startsWith</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;is&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					meta.<span style="color: #006633;">addDvoPropertiesToQueryPaths</span><span style="color: #009900;">&#40;</span>propertyName, propertyName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
			entityMetaByDvoClass.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>dvo, meta<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Created entity meta: &quot;</span><span style="color: #339933;">+</span>meta<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> registerDvo<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> dvo<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		registerDvo<span style="color: #009900;">&#40;</span>dvo.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> DvoEntityMeta getMetaByDvo<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Class</span> dvoClass<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>isDvo<span style="color: #009900;">&#40;</span>dvoClass<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			registerDvo<span style="color: #009900;">&#40;</span>dvoClass<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> entityMetaByDvoClass.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>dvoClass<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> DvoEntityMeta getMetaByDvo<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> dvo<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>isDvo<span style="color: #009900;">&#40;</span>dvo<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			registerDvo<span style="color: #009900;">&#40;</span>dvo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> entityMetaByDvoClass.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>dvo.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>There are two annotations used for the dvos,<br />
one to annotate a class as a dvo called &#8220;DvoAnnotation&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@Retention<span style="color: #009900;">&#40;</span>RetentionPolicy.<span style="color: #006633;">RUNTIME</span><span style="color: #009900;">&#41;</span>
@Target<span style="color: #009900;">&#40;</span>ElementType.<span style="color: #006633;">TYPE</span><span style="color: #009900;">&#41;</span>
@Inherited
<span style="color: #000000; font-weight: bold;">public</span> @<span style="color: #000000; font-weight: bold;">interface</span> DvoAnnotation <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">Class</span> rootDomainClass<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">boolean</span> defaultPropertyMapping<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">default</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>It is used like this (on the classes from last article):</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@DvoAnnotation<span style="color: #009900;">&#40;</span>rootDomainClass<span style="color: #339933;">=</span>Person.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> PersonLastNameCountryViewObject<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> lastName<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> countryName<span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// more to come</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>And one annotation called &#8220;DvoPropertyAnnotation&#8221; for the mapping of the query-path to the properties (only for getters):</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@Retention<span style="color: #009900;">&#40;</span>RetentionPolicy.<span style="color: #006633;">RUNTIME</span><span style="color: #009900;">&#41;</span>
@Target<span style="color: #009900;">&#40;</span>ElementType.<span style="color: #006633;">METHOD</span><span style="color: #009900;">&#41;</span>
@Inherited
<span style="color: #000000; font-weight: bold;">public</span> @<span style="color: #000000; font-weight: bold;">interface</span> DvoPropertyAnnotation <span style="color: #009900;">&#123;</span>
	<span style="color: #003399;">String</span> attributePath<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Which is used as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@DvoAnnotation<span style="color: #009900;">&#40;</span>rootDomainClass<span style="color: #339933;">=</span>Person.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> PersonLastNameCountryViewObject<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> lastName<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> countryName<span style="color: #339933;">;</span>
&nbsp;
	@DvoPropertyAnnotation<span style="color: #009900;">&#40;</span>attributePath<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;lastName&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Long</span> getLastName<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> id<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setLastName<span style="color: #009900;">&#40;</span><span style="color: #003399;">Long</span> id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">id</span> <span style="color: #339933;">=</span> id<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@DvoPropertyAnnotation<span style="color: #009900;">&#40;</span>attributePath<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;address.country.name&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getCountryName<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> name<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setCountryName<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> countryName<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">countryName</span> <span style="color: #339933;">=</span> countryName<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Finally there are further few classes to handle executing and mapping the resultsets to the dvos, which are used in the dvo dao implementation:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DvoBuildByRowScrollActionImpl<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> CacheMode cacheMode<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> LockMode lockMode<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> DvoEntityMeta meta<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> Map<span style="color: #339933;">&lt;</span>String, Integer<span style="color: #339933;">&gt;</span> propertyColumnMapping<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> DvoBuildByRowScrollActionImpl<span style="color: #009900;">&#40;</span>DvoEntityMeta meta, Map<span style="color: #339933;">&lt;</span>String, Integer<span style="color: #339933;">&gt;</span> propertyColumnMapping<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">meta</span> <span style="color: #339933;">=</span> meta<span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">propertyColumnMapping</span> <span style="color: #339933;">=</span> propertyColumnMapping<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">Object</span> build<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> resultSetRow<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003399;">Object</span> dvo<span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			dvo <span style="color: #339933;">=</span> meta.<span style="color: #006633;">getDvoClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">newInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> err <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;While creating instance of dvo &quot;</span><span style="color: #339933;">+</span>meta.<span style="color: #006633;">getDvoClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot; with default constructor&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isErrorEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				LOG.<span style="color: #006633;">error</span><span style="color: #009900;">&#40;</span>err, e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e <span style="color: #000000; font-weight: bold;">instanceof</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#41;</span> e<span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
				<span style="color: #003399;">RuntimeException</span> rt <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#40;</span>err, e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				rt.<span style="color: #006633;">setStackTrace</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">throw</span> rt<span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> property<span style="color: #339933;">:</span>propertyColumnMapping.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
				PropertyUtils.<span style="color: #006633;">setProperty</span><span style="color: #009900;">&#40;</span>dvo, property, resultSetRow<span style="color: #009900;">&#91;</span>propertyColumnMapping.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>property<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> err <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;While setting property <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">+</span>property<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> from column <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">+</span>propertyColumnMapping.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>property<span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> on dvo &quot;</span><span style="color: #339933;">+</span>dvo.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isErrorEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					LOG.<span style="color: #006633;">error</span><span style="color: #009900;">&#40;</span>err, e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e <span style="color: #000000; font-weight: bold;">instanceof</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#41;</span> e<span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
					<span style="color: #003399;">RuntimeException</span> rt <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#40;</span>err, e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					rt.<span style="color: #006633;">setStackTrace</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000000; font-weight: bold;">throw</span> rt<span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> dvo<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> CacheMode getCacheMode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> cacheMode<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> LockMode getLockMode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> lockMode<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> ScrollMode getScrollMode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> ScrollMode.<span style="color: #006633;">FORWARD_ONLY</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Still the API is not complete and not optimal. It is now easier to write dvo classes, but the limitations, that the datatype of the setter in the view object has to be the same as in the corresponding domain property as well as the limitation that restricting the query is quite difficult, as you don’t know the aliases of the generated aggregations a priori, still exists. Also there is some potential on optimizations on the generated queries.<br />
But this all is not too complicated to do, as now there is a better basis for continuing.</p>
]]></content:encoded>
			<wfw:commentRss>http://narcanti.keyboardsamurais.de/hibernate-data-view-objects-annotations.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate DataViewObjects</title>
		<link>http://narcanti.keyboardsamurais.de/hibernate-dataviewobjects.html</link>
		<comments>http://narcanti.keyboardsamurais.de/hibernate-dataviewobjects.html#comments</comments>
		<pubDate>Sun, 17 Jan 2010 20:03:54 +0000</pubDate>
		<dc:creator>Secco</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://narcanti.keyboardsamurais.de/?p=427</guid>
		<description><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/>When working with Hibernate and nested domain object models, it can be a performance problem when trying to display several (including nested) properties in a view. Usually for such cases the use of view objects is practical. This is the first scetch of my idea to automate population of view objects with hibernate. Meanwhile I [...]]]></description>
			<content:encoded><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/><p>When working with Hibernate and nested domain object models, it can be a performance problem when trying to display several (including nested) properties in a view. Usually for such cases the use of view objects is practical.<br />
This is the first scetch of my idea to automate population of view objects with hibernate.<br />
<span id="more-427"></span><br />
Meanwhile I worked out some extended example with the use of Annotations. However, the current form is not usefull enough, as using criterions for restrictions is quite difficult. But more details on the next part of this. Here the first one:</p>
<p>Assume we have some nested domain model consisting of a person, an address and a country as following:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@<span style="color: #003399;">Entity</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Person<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Long</span> id<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> firstname<span style="color: #339933;">:</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> lastName<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Date</span> birthdate<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> comment<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> Address address<span style="color: #339933;">;</span>
&nbsp;
	@Id
	@GeneratedValue<span style="color: #009900;">&#40;</span>strategy<span style="color: #339933;">=</span>GenerationType.<span style="color: #006633;">AUTO</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Long</span> getId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> id<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// appropriate getters and setter for id,</span>
	<span style="color: #666666; font-style: italic;">// firstname, lastname, birthdate and comment</span>
&nbsp;
	@ManyToOne
	<span style="color: #000000; font-weight: bold;">public</span> Address getAddress<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> address<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
@<span style="color: #003399;">Entity</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Address<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Long</span> id<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> street<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> Country country<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// appropriate getters and setter for </span>
	<span style="color: #666666; font-style: italic;">// id, street and country</span>
&nbsp;
	@ManyToOne
	<span style="color: #000000; font-weight: bold;">public</span> Country getCountry<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> country<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
@<span style="color: #003399;">Entity</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Country<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> iso3166<span style="color: #339933;">;</span> 
	<span style="color: #666666; font-style: italic;">// iso 3166 2 letter code </span>
	<span style="color: #666666; font-style: italic;">// (uppercase), like DE for Germany</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> name<span style="color: #339933;">;</span>
&nbsp;
	@Id
	@Column<span style="color: #009900;">&#40;</span>length<span style="color: #339933;">=</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getIso3166<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> iso3166<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// appropriate getters and setter for name and iso3166</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Now let&#8217;s assume we want to build a list displaying only the lastname and the countryname of a person. In such a case it&#8217;s unneccessary to do a query like &#8220;SELECT p FROM Person p&#8221;, since even if lazy loading is enabled, hibernate will load all properties leading to lot&#8217;s of unneeded data transported from database to application.<br />
In such a case we would prefer to build a view object, that only will hold the information we need to display:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> PersonLastNameCountryViewObject<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> lastName<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> countryName<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// appropriate getters and setter</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>So we now have a lightweight view object, but how do we get the data into it?<br />
One possibility would be to build a custom query for this, like:</p>
<pre>
SELECT p.lastName, c.name FROM Person p LEFT JOIN p.address AS a LEFT JOIN a.country AS c
</pre>
<p>This would give us the needed data and we only would have to map the results to our view object.<br />
Having several views may lead to lots of custom queries and code doing the retrieval and mapping stuff. So why not automating it?</p>
<p>I created some classes to handle this work, but there are few informations that have to be given to it, especially about which view object properties to map to which domain model properties.<br />
In the above view object example, I decided to use a map of view object properties and define a domain model path for each, just like in commons-beanutils.<br />
The mapping for the above example would be:</p>
<pre>
lastName -> lastName
countryName -> address.country.name
</pre>
<p>The path here starts with the initial domain class, in this case the Person class. Since Hibernate does not support nested object paths like in</p>
<pre>
SELECT p.name, p.address.country.name FROM Person p
</pre>
<p>I built some code to split the path and join the appropriate domain models into the query just to have the working query denoted previously.<br />
So my view object mapping helpers contain of following classes:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Just an interface that will create a </span>
<span style="color: #666666; font-style: italic;">// view object for us for each resultset row</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> ViewObjectFactory<span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> createNewViewObject<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// a cimple class to hold all ,eta data needed for building our view objects</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ViewObjectMetaData<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// This will hold the mappings like</span>
  <span style="color: #666666; font-style: italic;">// lastName -&gt; lastName</span>
  <span style="color: #666666; font-style: italic;">// countryName -&gt; address.country.name</span>
  <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> HashMap<span style="color: #339933;">&lt;</span>String, String<span style="color: #339933;">&gt;</span> 
    propertiesToObjectPaths <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HashMap<span style="color: #339933;">&lt;</span>String, String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// this will hold our initial domain class, like Person.class.</span>
  <span style="color: #666666; font-style: italic;">// we need this to create a criteria in hibernate later on</span>
  <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">Class</span> domainClass<span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// the factory we will use to create the view objects</span>
  <span style="color: #000000; font-weight: bold;">private</span> ViewObjectFactory voFactory<span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// as default, if no object paths are given, we assume that each view object property</span>
  <span style="color: #666666; font-style: italic;">// will be mapped non-nestingly to the domain class propertys with the same name.</span>
  <span style="color: #666666; font-style: italic;">// so the mapping will be something like:</span>
  <span style="color: #666666; font-style: italic;">// propertyA -&gt; propertyA</span>
  <span style="color: #666666; font-style: italic;">// propertyB -&gt; propertyB</span>
  <span style="color: #666666; font-style: italic;">// will need BeanUtils to work, or make some own code with reflection</span>
  <span style="color: #000000; font-weight: bold;">public</span> ViewObjectMetaData<span style="color: #009900;">&#40;</span>ViewObjectFactory voFactory, 
    <span style="color: #000000; font-weight: bold;">Class</span> domainClass<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">voFactory</span> <span style="color: #339933;">=</span> voFactory<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">domainClass</span> <span style="color: #339933;">=</span> domainClass<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #003399;">Map</span> desc <span style="color: #339933;">=</span> BeanUtils.<span style="color: #006633;">describe</span><span style="color: #009900;">&#40;</span>dtoFactory.<span style="color: #006633;">createDto</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      desc.<span style="color: #006633;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;class&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">final</span> Collection<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> properties <span style="color: #339933;">=</span> 
        <span style="color: #009900;">&#40;</span>Collection<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#41;</span> desc.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> property<span style="color: #339933;">:</span>properties<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        propertiesToObjectPaths.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>property, property<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">// just make a runtime exception from it...</span>
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e <span style="color: #000000; font-weight: bold;">instanceof</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#41;</span> e<span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">RuntimeException</span> r <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        r.<span style="color: #006633;">setStackTrace</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">throw</span> r<span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> ViewObjectMetaData<span style="color: #009900;">&#40;</span>ViewObjectFactory voFactory, 
    <span style="color: #000000; font-weight: bold;">Class</span> domainClass, 
    Map<span style="color: #339933;">&lt;</span>String, String<span style="color: #339933;">&gt;</span> propertiesToObjectPaths<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">voFactory</span> <span style="color: #339933;">=</span> voFactory<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">domainClass</span> <span style="color: #339933;">=</span> domainClass<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">propertiesToObjectPaths</span>.<span style="color: #006633;">putAll</span><span style="color: #009900;">&#40;</span>propertiesToObjectPaths<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// appropriate getters</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Now we have all information needed to build up queries and populate the view objects. The main work will consist of building up the query from the object path and mapping the resultset to the view objects.<br />
For building the query, I used the criteria API of hibernate, which allows to add further restrictions on the query later on. The algorithm for transforming the object path to a criteria is not that complicated. We have to think about two different cases in the object path:</p>
<p>1. object path consists of one part, like &#8220;lastName&#8221;. This has to be mapped to a projection, like:</p>
<pre>
SELECT p.lastName FROM Person p
</pre>
<p>2. the object consists of multiple parts, like &#8220;address.street&#8221; or &#8220;address.country.name&#8221;. In this case we have to create a hibernate alias (which internally maps to a join) for each part except the first (which is the root domain class) and the last, which has to be added as a projection as it is the property we want to have. So we have for the two part object path example:</p>
<pre>
SELECT a.street FROM Person p LEFT JOIN p.address AS a
</pre>
<p>and the three part object path example:</p>
<pre>
SELECT c.name FROM Person p LEFT JOIN p.address AS a LEFT JOIN a.country AS c
</pre>
<p>Also we&#8217;ll keep track of the indices of the projected properties in the resultset for the mapping between resultset and viewobject</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ViewObjectCriteriaBuilder<span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// just a helper class to transport </span>
  <span style="color: #666666; font-style: italic;">// criteria and columnmappings</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">class</span> ViewObjectCriteria<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> Criteria criteria<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> HashMap<span style="color: #339933;">&lt;</span>String, Integer<span style="color: #339933;">&gt;</span> propertyToColumnMappings <span style="color: #339933;">=</span> 
      <span style="color: #000000; font-weight: bold;">new</span> HashMap<span style="color: #339933;">&lt;</span>String, Integer<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// apropriate getters/setters</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">private</span> SessionFactory sessionFactory<span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// appropriate setter for the sessionFactory </span>
  <span style="color: #666666; font-style: italic;">// or just pass a current session to the next method</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> ViewObjectCriteria buildCriteria<span style="color: #009900;">&#40;</span>ViewObjectMetaData voMetaData<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">final</span> ViewObjectCriteria voCriteria <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ViewObjectCriteria<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">final</span> Criteria criteria <span style="color: #339933;">=</span> sessionFactory.
      <span style="color: #006633;">getCurrentSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.
      <span style="color: #006633;">createCriteria</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;d&quot;</span>, voMetaData.<span style="color: #006633;">getDomainClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    voCriteria.<span style="color: #006633;">setCriteria</span><span style="color: #009900;">&#40;</span>criteria<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">final</span> Map<span style="color: #339933;">&lt;</span>String, String<span style="color: #339933;">&gt;</span> propertiesToObjectPaths <span style="color: #339933;">=</span> 
      voMetaData.<span style="color: #006633;">getPropertiesToObjectPaths</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// our projections</span>
    <span style="color: #000000; font-weight: bold;">final</span> ProjectionList projections <span style="color: #339933;">=</span> Projections.<span style="color: #006633;">projectionList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// max. amount of aggregations in object path</span>
    <span style="color: #000066; font-weight: bold;">int</span> maxAggregationDeepth <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// index of property in resultset</span>
    <span style="color: #000066; font-weight: bold;">int</span> propertyColumnIndex <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003399;">String</span> objectPath<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// objectpath of current vo property</span>
    <span style="color: #666666; font-style: italic;">// amount of aggregations in current object path</span>
    <span style="color: #000066; font-weight: bold;">int</span> aggregationDeepth<span style="color: #339933;">;</span> 
    <span style="color: #000000; font-weight: bold;">final</span> ArrayList<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> aggregationParts <span style="color: #339933;">=</span> 
      <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// parts of the object path, splitted</span>
&nbsp;
&nbsp;
    <span style="color: #666666; font-style: italic;">// in the first step we only collect information </span>
    <span style="color: #666666; font-style: italic;">// about the needed aggregations,</span>
    <span style="color: #666666; font-style: italic;">// the joins will be build later on</span>
    <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> property<span style="color: #339933;">:</span>propertiesToObjectPaths.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      objectPath <span style="color: #339933;">=</span> propertiesToObjectPaths.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>property<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #666666; font-style: italic;">// this helper just counts the </span>
      <span style="color: #666666; font-style: italic;">// occurences of '.' in the objectPath</span>
      aggregationDeepth <span style="color: #339933;">=</span> StringUtil.<span style="color: #006633;">occurences</span><span style="color: #009900;">&#40;</span>objectPath, <span style="color: #0000ff;">'.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>aggregationDeepth<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// no aggregation, like</span>
        <span style="color: #666666; font-style: italic;">// lastName -&gt; d.lastName</span>
        projections.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>Projections.<span style="color: #006633;">property</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;d.&quot;</span><span style="color: #339933;">+</span>objectPath<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
        maxAggregationDeepth <span style="color: #339933;">=</span> 
          <span style="color: #003399;">Math</span>.<span style="color: #006633;">max</span><span style="color: #009900;">&#40;</span>maxAggregationDeepth, aggregationDeepth<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">// aggregations exist</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// first split the object path</span>
        aggregationParts.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">// this helper splits the objectPath </span>
        <span style="color: #666666; font-style: italic;">// on &quot;\\.&quot; and adds all parts to the </span>
        <span style="color: #666666; font-style: italic;">// aggregationParts-list. Works the same </span>
        <span style="color: #666666; font-style: italic;">// way as String.split</span>
        CollectionSplitter.<span style="color: #006633;">toList</span><span style="color: #009900;">&#40;</span>aggregationParts, objectPath, <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// last aggregations alias</span>
        <span style="color: #003399;">String</span> lastAggregationName <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span> currentAggregationPart, currentAggregationName<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// when we're here, there are at least two parts in the object path</span>
        <span style="color: #666666; font-style: italic;">// first part is an property of the </span>
        <span style="color: #666666; font-style: italic;">// root domain class, e. g. address -&gt; d.address</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> aggregationIndex<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> 
          aggregationIndex<span style="color: #339933;">&lt;=</span>aggregationDeepth<span style="color: #339933;">;</span> aggregationIndex<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
          currentAggregationPart <span style="color: #339933;">=</span> aggregationParts.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>aggregationIndex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>aggregationIndex<span style="color: #339933;">==</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// equals to &quot;LEFT JOIN d.address AS ag_address&quot;</span>
            lastAggregationName <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;ag_&quot;</span><span style="color: #339933;">+</span>currentAggregationPart<span style="color: #339933;">;</span>
            aggregations.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>
              <span style="color: #0000ff;">&quot;d.&quot;</span><span style="color: #339933;">+</span>currentAggregationPart, 
              lastAggregationName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
          <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>aggregationIndex<span style="color: #339933;">==</span>aggregationDeepth<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// last part in object path, which </span>
            <span style="color: #666666; font-style: italic;">// denotes a property we want to have projected</span>
            <span style="color: #666666; font-style: italic;">// equals to &quot;SELECT ... ag_address_country.name FROM ...&quot;</span>
            projections.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>
              Projections.<span style="color: #006633;">property</span><span style="color: #009900;">&#40;</span>
                lastAggregationName<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;.&quot;</span><span style="color: #339933;">+</span>currentAggregationPart<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
          <span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// somewhere in the middle</span>
            <span style="color: #666666; font-style: italic;">// equals to </span>
            <span style="color: #666666; font-style: italic;">// &quot;LEFT JOIN ag_address.country AS ag_address_country&quot;</span>
            currentAggregationName <span style="color: #339933;">=</span> 
              lastAggregationName<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;_&quot;</span><span style="color: #339933;">+</span>currentAggregationPart<span style="color: #339933;">;</span>
            aggregations.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>
              lastAggregationName<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;.&quot;</span><span style="color: #339933;">+</span>currentAggregationPart, 
              currentAggregationName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            lastAggregationName <span style="color: #339933;">=</span> currentAggregationName<span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
      <span style="color: #666666; font-style: italic;">// update index of property in resultset</span>
      voCriteria.<span style="color: #006633;">getPropertyToColumnMappings</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.
        <span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>property, propertyColumnIndex<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// if there are any aggregations, we have</span>
    <span style="color: #666666; font-style: italic;">// to add an alias for each to the criteria</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>maxAggregationDeepth<span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">// sort aggregatios (joins) by their alias length</span>
      <span style="color: #666666; font-style: italic;">// this is to enshure that ag_address is </span>
      <span style="color: #666666; font-style: italic;">// added before ag_address_country</span>
&nbsp;
      <span style="color: #000000; font-weight: bold;">final</span> List<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> aggregationsSizeSorted <span style="color: #339933;">=</span> 
        <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span>aggregations.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #003399;">Collections</span>.<span style="color: #006633;">sort</span><span style="color: #009900;">&#40;</span>aggregationsSizeSorted, 
        <span style="color: #666666; font-style: italic;">// the string length comparator just compares</span>
        <span style="color: #666666; font-style: italic;">// the length of two strings</span>
        <span style="color: #000000; font-weight: bold;">new</span> StringLengthComparator<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> fromAggregation<span style="color: #339933;">:</span>aggregationsSizeSorted<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// here we also may use LEFT JOIN or some other join type</span>
        criteria.<span style="color: #006633;">createAlias</span><span style="color: #009900;">&#40;</span>
          fromAggregation, 
          aggregations.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>fromAggregation<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// add projections to criteria</span>
    criteria.<span style="color: #006633;">setProjection</span><span style="color: #009900;">&#40;</span>projections<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">return</span> voCriteria<span style="color: #339933;">;</span>    
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Now we have build a criteria which will load all neccessary data from the database. Meanwhile we could add some restrictions or limitations to the query to only retrieve a portion of all rows. Somewhere all along the code we will need to have a valid session/transaction, but I&#8217;ll skip that, as this is just an example.</p>
<p>Next we build a class that will execute the criteria and map the columns from the resultset to the viewobjects. Here are several possibilites. For example using a special hibernate rowsetmapper, but the way I did it below also works fine.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">List</span> buildViewObjects<span style="color: #009900;">&#40;</span>ViewObjectCriteria voCriteria, 
  ViewObjectMetaData voMetaData<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
  ScrollableResults result <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span>
    Criteria criteria <span style="color: #339933;">=</span> voCriteria.<span style="color: #006633;">getCriteria</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Map<span style="color: #339933;">&lt;</span>String, Integer<span style="color: #339933;">&gt;</span> propertyColumnMappings <span style="color: #339933;">=</span> 
      voCriteria.<span style="color: #006633;">getPropertyColumnMappings</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">// some cache method or scroll lock method here, if needed</span>
    result <span style="color: #339933;">=</span> criteria.<span style="color: #006633;">scroll</span><span style="color: #009900;">&#40;</span>ScrollMode.<span style="color: #006633;">FORWARD_ONLY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">Object</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> rowdata<span style="color: #339933;">;</span>
    <span style="color: #003399;">Object</span> resultObject<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">ArrayList</span> viewObjects <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>result.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      rowdata <span style="color: #339933;">=</span> result.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      resultObject <span style="color: #339933;">=</span> voMetaData.<span style="color: #006633;">getViewObjectFactory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.
        <span style="color: #006633;">createNewViewObject</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> property<span style="color: #339933;">:</span>
        propertyColumnMapping.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
          <span style="color: #666666; font-style: italic;">// also possible via reflection</span>
          PropertyUtils.<span style="color: #006633;">setProperty</span><span style="color: #009900;">&#40;</span>resultObject, 
            property, rowdata<span style="color: #009900;">&#91;</span>propertyColumnMappings.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>property<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isErrorEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            LOG.<span style="color: #006633;">error</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;While setting property <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">+</span>
              property<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> from column <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">+</span>
              propertyColumnMapping.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>property<span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span>, e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
          resultObject <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>resultObject<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        viewObjects.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>resultObject<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">return</span> viewObjects<span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #000000; font-weight: bold;">finally</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>result<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      result.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>That&#8217;s it (for now).</p>
<p>Limitations:<br />
<dir></p>
<li>the datatype of the setter in the view object has to be the same as in the corresponding domain property</li>
<li>restricting the query is quite difficult, as you don&#8217;t know the aliases of the generated aggregations a priori</li>
<p></dir></p>
<p>Further improvements could be:<br />
<dir></p>
<li>some annotations so that we just annotate our view object and rest is done in background</li>
<li>make a full working open-source API out of it</li>
<li>optimizations on the queries. if we only would like to select the id of a nested domain class, like &#8220;address.id&#8221;, which already is known to the Person table (since this is the referencing foreign key), it would be great not to have to join the addresses</li>
<li>automatic mapping between differring property types of view object and domain object (eg. long to string convertions)</li>
<li>improve the possibility to restrict the generated query</li>
<p></dir></p>
]]></content:encoded>
			<wfw:commentRss>http://narcanti.keyboardsamurais.de/hibernate-dataviewobjects.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hibernate Deeper OrderBy</title>
		<link>http://narcanti.keyboardsamurais.de/hibernate-deeper-orderby.html</link>
		<comments>http://narcanti.keyboardsamurais.de/hibernate-deeper-orderby.html#comments</comments>
		<pubDate>Sun, 08 Nov 2009 19:50:01 +0000</pubDate>
		<dc:creator>Secco</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://narcanti.keyboardsamurais.de/?p=422</guid>
		<description><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/>Hibernate unterst&#252;tzt in der Criteria API bei der Angabe von Properties f&#252;r Criterions oder auch Sortierungen lediglich die Angabe von Properties der Tiefe 1. Beispielsweise ist criteria.addOrder(Order.asc("id")) m&#246;glich, jedoch criteria.addOrder(Order.asc("parent.id")) oder gar criteria.addOrder(Order.asc("parent.parent.id")) nicht m&#246;glich. Um diese Abbilden zu k&#246;nnen, muss man sich einiger Joins oder Aliase bedienen. Im folgenden wird dies anhand der Sortierung [...]]]></description>
			<content:encoded><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/><p>Hibernate unterst&#252;tzt in der Criteria API bei der Angabe von Properties f&#252;r Criterions oder auch Sortierungen lediglich die Angabe von Properties der Tiefe 1.<br />
Beispielsweise ist <code lang="java">criteria.addOrder(Order.asc("id"))</code> m&#246;glich, jedoch <code lang="java">criteria.addOrder(Order.asc("parent.id"))</code> oder gar <code lang="java">criteria.addOrder(Order.asc("parent.parent.id"))</code> nicht m&#246;glich.<br />
Um diese Abbilden zu k&#246;nnen, muss man sich einiger Joins oder Aliase bedienen.<br />
Im folgenden wird dies anhand der Sortierung gel&#246;st.<br />
<span id="more-422"></span><br />
Angenommen wir erhalten das Sortierkriterium als String orderBy, welches eine Property oder einen Property-Pfad f&#252;r das entsprechende Attribut enth&#228;lt.<br />
So k&#246;nnen mit Hilfe eines simplen &#8220;Parsers&#8221; die ben&#246;tigten Aliase f&#252;r Joins hinzugef&#252;gt werden.<br />
Die Hilfsmethode StringUtil.occurences(String s, char c) z&#228;hlt lediglich die Vorkommen von c in s.<br />
Zus&#228;tzlich wird in boolean asc hinterlegt, ob absteigend (true) oder aufsteigend (false) sortiert wird.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">final</span> Criteria criteria <span style="color: #339933;">=</span> getCurrentSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">createCriteria</span><span style="color: #009900;">&#40;</span>MyDomain.<span style="color: #000000; font-weight: bold;">class</span>, <span style="color: #0000ff;">&quot;d&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// d ist alias für unser domain objekt</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>orderBy<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> orderBy.<span style="color: #006633;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// erlaubt die benutzung von z. b. d.parent.object.name zum sortieren</span>
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>StringUtil.<span style="color: #006633;">occurences</span><span style="color: #009900;">&#40;</span>orderBy, <span style="color: #0000ff;">'.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> parts <span style="color: #339933;">=</span> orderBy.<span style="color: #006633;">split</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    criteria.<span style="color: #006633;">createAlias</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;d.&quot;</span><span style="color: #339933;">+</span>parts<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span>, <span style="color: #0000ff;">&quot;x&quot;</span><span style="color: #339933;">+</span>parts<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> t<span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> t<span style="color: #339933;">&lt;=</span>parts.<span style="color: #006633;">length</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span> t<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      criteria.<span style="color: #006633;">createAlias</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;x&quot;</span><span style="color: #339933;">+</span>parts<span style="color: #009900;">&#91;</span>t<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;.&quot;</span><span style="color: #339933;">+</span>parts<span style="color: #009900;">&#91;</span>t<span style="color: #009900;">&#93;</span>, <span style="color: #0000ff;">&quot;x&quot;</span><span style="color: #339933;">+</span>parts<span style="color: #009900;">&#91;</span>t<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    orderBy <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;x&quot;</span><span style="color: #339933;">+</span>parts<span style="color: #009900;">&#91;</span>parts.<span style="color: #006633;">length</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;.&quot;</span><span style="color: #339933;">+</span>parts<span style="color: #009900;">&#91;</span>parts.<span style="color: #006633;">length</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>asc<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    criteria.<span style="color: #006633;">addOrder</span><span style="color: #009900;">&#40;</span> Order.<span style="color: #006633;">asc</span><span style="color: #009900;">&#40;</span>orderBy<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
    criteria.<span style="color: #006633;">addOrder</span><span style="color: #009900;">&#40;</span> Order.<span style="color: #006633;">desc</span><span style="color: #009900;">&#40;</span>orderBy<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Der Kode erzeugt Aliase f&#252;r alle in der orderBy vorkommenden Properties und kann auch verwendet werden, um in Criterions einen entsprechenden Pfad zu bauen.</p>
]]></content:encoded>
			<wfw:commentRss>http://narcanti.keyboardsamurais.de/hibernate-deeper-orderby.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring Hibernate Snipplets</title>
		<link>http://narcanti.keyboardsamurais.de/spring-hibernate-snipplets.html</link>
		<comments>http://narcanti.keyboardsamurais.de/spring-hibernate-snipplets.html#comments</comments>
		<pubDate>Sun, 08 Nov 2009 17:29:47 +0000</pubDate>
		<dc:creator>Secco</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://narcanti.keyboardsamurais.de/?p=421</guid>
		<description><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/>Few snipplets making the usage of hibernate with annotations within spring easier. &#60;bean name=&#34;systemProperties&#34; class=&#34;org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&#34; lazy-init=&#34;false&#34;&#62; &#60;property name=&#34;location&#34; value=&#34;classpath:myproject.properties&#34;/&#62; &#60;/bean&#62; &#160; &#60;bean id=&#34;dataSource&#34; class=&#34;org.apache.commons.dbcp.BasicDataSource&#34; destroy-method=&#34;close&#34;&#62; &#60;property name=&#34;driverClassName&#34; value=&#34;com.mysql.jdbc.Driver&#34; /&#62; &#60;property name=&#34;url&#34; value=&#34;${db.url}&#34; /&#62; &#60;property name=&#34;username&#34; value=&#34;${db.user}&#34; /&#62; &#60;property name=&#34;password&#34; value=&#34;${db.password}&#34; /&#62; &#60;property name=&#34;maxActive&#34; value=&#34;${db.maxconnections}&#34;/&#62; &#60;property name=&#34;maxIdle&#34; value=&#34;${db.minconnections}&#34;/&#62; &#60;property name=&#34;maxWait&#34; value=&#34;1500&#34;/&#62; &#60;property name=&#34;poolPreparedStatements&#34; value=&#34;true&#34;/&#62; &#60;property name=&#34;initialSize&#34; [...]]]></description>
			<content:encoded><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/><p>Few snipplets making the usage of hibernate with annotations within spring easier.<br />
<span id="more-421"></span></p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;systemProperties&quot;</span> </span>
<span style="color: #009900;">  <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&quot;</span> </span>
<span style="color: #009900;">  <span style="color: #000066;">lazy-init</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;location&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;classpath:myproject.properties&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.apache.commons.dbcp.BasicDataSource&quot;</span> <span style="color: #000066;">destroy-method</span>=<span style="color: #ff0000;">&quot;close&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;driverClassName&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;com.mysql.jdbc.Driver&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;url&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${db.url}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;username&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${db.user}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;password&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${db.password}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;maxActive&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${db.maxconnections}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;maxIdle&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${db.minconnections}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;maxWait&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;1500&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;poolPreparedStatements&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;initialSize&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${db.minconnections}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #808080; font-style: italic;">&lt;!-- not explained here, but sets the default table type on create tables --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;customTableTypeMySQLInnoDBDialectInjector&quot;</span> </span>
<span style="color: #009900;">  <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.beans.factory.config.MethodInvokingFactoryBean&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;staticMethod&quot;</span> </span>
<span style="color: #009900;">    <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;de.keyboardsamurais.narcanti.common.hibernate.CustomTableTypeMySQLInnoDBDialect.setTableTypeString&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;arguments&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;DEFAULT CHARSET=utf8 COLLATE=utf8_bin&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #808080; font-style: italic;">&lt;!-- AnnotationSessionFactoryBean finds annotated beans in packages automaticaly --&gt;</span>	
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;sessionFactory&quot;</span> </span>
<span style="color: #009900;">  <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean&quot;</span> </span>
<span style="color: #009900;">  <span style="color: #000066;">depends-on</span>=<span style="color: #ff0000;">&quot;customTableTypeMySQLInnoDBDialectInjector&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;annotatedPackages&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;myproject.domain&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;configurationClass&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;org.hibernate.cfg.AnnotationConfiguration&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;hibernateProperties&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;props<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.dialect&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        de.keyboardsamurais.narcanti.common.hibernate.CustomTableTypeMySQLInnoDBDialect
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.hbm2ddl.auto&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>${db.hbm2ddl.auto}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.order_updates&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.max_fetch_depth&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.jdbc.batch_size&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>10<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.connection.useUnicode&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.connection.characterEncoding&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>utf8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.connection.characterSetResults&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>utf8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.connection.clobCharacterEncoding&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>utf8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/props<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;transactionManager&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.orm.hibernate3.HibernateTransactionManager&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;sessionFactory&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;sessionFactory&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #808080; font-style: italic;">&lt;!-- I preferr defining this here instead of using aspects --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;daoTransactionProxyTemplate&quot;</span> <span style="color: #000066;">abstract</span>=<span style="color: #ff0000;">&quot;true&quot;</span> </span>
<span style="color: #009900;">  <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.transaction.interceptor.TransactionProxyFactoryBean&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;transactionAttributeSource&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.transaction.annotation.AnnotationTransactionAttributeSource&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;transactionManager&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;transactionManager&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #808080; font-style: italic;">&lt;!-- for all daos with setSessionFactory --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;daoTemplate&quot;</span> <span style="color: #000066;">abstract</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;sessionFactory&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;sessionFactory&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #808080; font-style: italic;">&lt;!-- example dao --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;myDao&quot;</span> <span style="color: #000066;">parent</span>=<span style="color: #ff0000;">&quot;daoTransactionProxyTemplate&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;target&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;myproject.dao.MyDaoImpl&quot;</span> <span style="color: #000066;">parent</span>=<span style="color: #ff0000;">&quot;daoTemplate&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;proxyInterfaces&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;myproject.dao.MyDao&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://narcanti.keyboardsamurais.de/spring-hibernate-snipplets.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate Criteria to SQL Translation</title>
		<link>http://narcanti.keyboardsamurais.de/hibernate-criteria-to-sql-translation.html</link>
		<comments>http://narcanti.keyboardsamurais.de/hibernate-criteria-to-sql-translation.html#comments</comments>
		<pubDate>Tue, 01 Sep 2009 19:39:03 +0000</pubDate>
		<dc:creator>Secco</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[criteria to sql]]></category>
		<category><![CDATA[hql to sql]]></category>

		<guid isPermaLink="false">http://narcanti.keyboardsamurais.de/?p=410</guid>
		<description><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/>Some time ago I posted a helper-class to transform HQL to SQL for debugging purposes. Meanwhile I found out how also to transform Criterias to SQL. Please be aware that the solution below seems like a big dirty hack to me. import java.lang.reflect.Field; import java.util.Collections; &#160; import org.hibernate.Criteria; import org.hibernate.SessionFactory; import org.hibernate.engine.SessionFactoryImplementor; import org.hibernate.hql.QueryTranslator; import [...]]]></description>
			<content:encoded><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/><p>Some time ago I <a href="http://narcanti.keyboardsamurais.de/hibernate-hql-to-sql-translation.html">posted a helper-class to transform HQL to SQL</a> for debugging purposes. Meanwhile I found out how also to transform Criterias to SQL.<br />
<span id="more-410"></span><br />
Please be aware that the solution below seems like a big dirty hack to me.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.lang.reflect.Field</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Collections</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.Criteria</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.SessionFactory</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.engine.SessionFactoryImplementor</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.hql.QueryTranslator</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.hql.QueryTranslatorFactory</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.hql.ast.ASTQueryTranslatorFactory</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.impl.CriteriaImpl</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.impl.SessionImpl</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.loader.OuterJoinLoader</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.loader.criteria.CriteriaLoader</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.persister.entity.OuterJoinLoadable</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HibernateHqlAndCriteriaToSqlTranslator <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">private</span> SessionFactory sessionFactory<span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setSessionFactory<span style="color: #009900;">&#40;</span>SessionFactory sessionFactory<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">sessionFactory</span> <span style="color: #339933;">=</span> sessionFactory<span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> toSql<span style="color: #009900;">&#40;</span>Criteria criteria<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span>
      CriteriaImpl c <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>CriteriaImpl<span style="color: #009900;">&#41;</span> criteria<span style="color: #339933;">;</span>
      SessionImpl s <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>SessionImpl<span style="color: #009900;">&#41;</span>c.<span style="color: #006633;">getSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      SessionFactoryImplementor factory <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>SessionFactoryImplementor<span style="color: #009900;">&#41;</span>s.<span style="color: #006633;">getSessionFactory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> implementors <span style="color: #339933;">=</span> factory.<span style="color: #006633;">getImplementors</span><span style="color: #009900;">&#40;</span> c.<span style="color: #006633;">getEntityOrClassName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      CriteriaLoader loader <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> CriteriaLoader<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>OuterJoinLoadable<span style="color: #009900;">&#41;</span>factory.<span style="color: #006633;">getEntityPersister</span><span style="color: #009900;">&#40;</span>implementors<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>,
        factory, c, implementors<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span>, s.<span style="color: #006633;">getEnabledFilters</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #003399;">Field</span> f <span style="color: #339933;">=</span> OuterJoinLoader.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006633;">getDeclaredField</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;sql&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      f.<span style="color: #006633;">setAccessible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#41;</span> f.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>loader<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> toSql<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> hqlQueryText<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>hqlQueryText<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> hqlQueryText.<span style="color: #006633;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">final</span> QueryTranslatorFactory translatorFactory <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ASTQueryTranslatorFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">final</span> SessionFactoryImplementor factory <span style="color: #339933;">=</span> 
        <span style="color: #009900;">&#40;</span>SessionFactoryImplementor<span style="color: #009900;">&#41;</span> sessionFactory<span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">final</span> QueryTranslator translator <span style="color: #339933;">=</span> translatorFactory.
        <span style="color: #006633;">createQueryTranslator</span><span style="color: #009900;">&#40;</span>
          hqlQueryText, 
          hqlQueryText, 
          <span style="color: #003399;">Collections</span>.<span style="color: #006633;">EMPTY_MAP</span>, factory
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      translator.<span style="color: #006633;">compile</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Collections</span>.<span style="color: #006633;">EMPTY_MAP</span>, <span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">return</span> translator.<span style="color: #006633;">getSQLString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://narcanti.keyboardsamurais.de/hibernate-criteria-to-sql-translation.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate Statistics JSP Reloaded</title>
		<link>http://narcanti.keyboardsamurais.de/hibernate-statistics-jsp-reloaded.html</link>
		<comments>http://narcanti.keyboardsamurais.de/hibernate-statistics-jsp-reloaded.html#comments</comments>
		<pubDate>Sun, 08 Mar 2009 17:41:35 +0000</pubDate>
		<dc:creator>Secco</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://narcanti.keyboardsamurais.de/?p=395</guid>
		<description><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/>Some time ago I posted a JSP-Page for displaying Hibernate-Statistics within an application. Meanwhile I also posted some Code to translate HQL queries to SQL. Now I merged both together to a new version of the Hibernate Statistics page that also displays SQL statements, and it&#8217;s still not a code-beauty The actual version uses the [...]]]></description>
			<content:encoded><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/><p>Some time ago I posted a <a href="http://narcanti.keyboardsamurais.de/hibernate-statistics-jsp.html">JSP-Page for displaying Hibernate-Statistics</a> within an application. Meanwhile I also posted some Code to <a href="http://narcanti.keyboardsamurais.de/hibernate-hql-to-sql-translation.html">translate HQL queries to SQL</a>. Now I merged both together to a new version of the Hibernate Statistics page that also displays SQL statements, and it&#8217;s still not a code-beauty <img src='http://narcanti.keyboardsamurais.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
<span id="more-395"></span><br />
The actual version uses the HTMLEscapeWriter from an earlier post of me. It&#8217;s still a dirty hack and not really safe, but works as a base.</p>
<p>The resulting page will look something like this (depending on stylesheets I forgot to include):<br />
<a href="http://narcanti.keyboardsamurais.de/wp-content/images/hibernate/hibernate-statistics.png"><img src="http://narcanti.keyboardsamurais.de/wp-content/images/hibernate/hibernate-statistics_small.png"/></a><br />
Don&#8217;t wonder about wrong sums in the image, since I had to clip a lot off.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #339933;">&lt;%</span>@ page language<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;java&quot;</span> contentType<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/html; charset=UTF-8&quot;</span> pageEncoding<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;java.util.*&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.hibernate.SessionFactory&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.hibernate.stat.Statistics&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.hibernate.stat.QueryStatistics&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;java.text.Collator&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.hibernate.stat.EntityStatistics&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.hibernate.stat.CollectionStatistics&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.hibernate.stat.SecondLevelCacheStatistics&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.springframework.context.ApplicationContext&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.springframework.web.context.support.WebApplicationContextUtils&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;java.util.Map&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;java.util.Date&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;%!</span>
	<span style="color: #000000; font-weight: bold;">static</span> Map<span style="color: #339933;">&lt;</span>String, QueryStatistics<span style="color: #339933;">&gt;</span> queryStatistics <span style="color: #339933;">=</span> 
		<span style="color: #003399;">Collections</span>.<span style="color: #006633;">synchronizedMap</span><span style="color: #009900;">&#40;</span>
			<span style="color: #000000; font-weight: bold;">new</span> TreeMap<span style="color: #339933;">&lt;</span>String, QueryStatistics<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Collator</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">static</span> Map<span style="color: #339933;">&lt;</span>String, EntityStatistics<span style="color: #339933;">&gt;</span> entityStatistics <span style="color: #339933;">=</span> 
		<span style="color: #003399;">Collections</span>.<span style="color: #006633;">synchronizedMap</span><span style="color: #009900;">&#40;</span>
			<span style="color: #000000; font-weight: bold;">new</span> TreeMap<span style="color: #339933;">&lt;</span>String, EntityStatistics<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Collator</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">static</span> Map<span style="color: #339933;">&lt;</span>String, CollectionStatistics<span style="color: #339933;">&gt;</span> collectionStatistics <span style="color: #339933;">=</span> 
		<span style="color: #003399;">Collections</span>.<span style="color: #006633;">synchronizedMap</span><span style="color: #009900;">&#40;</span>
			<span style="color: #000000; font-weight: bold;">new</span> TreeMap<span style="color: #339933;">&lt;</span>String, CollectionStatistics<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Collator</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">static</span> Map<span style="color: #339933;">&lt;</span>String, SecondLevelCacheStatistics<span style="color: #339933;">&gt;</span> secondLevelCacheStatistics <span style="color: #339933;">=</span> 
		<span style="color: #003399;">Collections</span>.<span style="color: #006633;">synchronizedMap</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> TreeMap<span style="color: #339933;">&lt;</span>String, SecondLevelCacheStatistics<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Collator</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">static</span> List<span style="color: #339933;">&lt;</span>Long<span style="color: #339933;">&gt;</span> generalStatistics <span style="color: #339933;">=</span> <span style="color: #003399;">Collections</span>.<span style="color: #006633;">synchronizedList</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>Long<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">18</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">static</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">9</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			generalStatistics.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Long</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">Date</span> lastUpdate<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">Date</span> activation<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">Date</span> deactivation<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HqlToSqlTranslator <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> toSql<span style="color: #009900;">&#40;</span>SessionFactory sessionFactory, <span style="color: #003399;">String</span> hqlQueryText<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>hqlQueryText<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
		        <span style="color: #000000; font-weight: bold;">final</span> QueryTranslatorFactory ast <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ASTQueryTranslatorFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	    	    <span style="color: #000000; font-weight: bold;">final</span> SessionFactoryImplementor factory <span style="color: #339933;">=</span>
	        		<span style="color: #009900;">&#40;</span>SessionFactoryImplementor<span style="color: #009900;">&#41;</span> sessionFactory<span style="color: #339933;">;</span>
		        <span style="color: #000000; font-weight: bold;">final</span> QueryTranslator newQueryTranslator <span style="color: #339933;">=</span> 
		        	ast.<span style="color: #006633;">createQueryTranslator</span><span style="color: #009900;">&#40;</span> 
	    	    		hqlQueryText, 
	        			hqlQueryText, 
	        			<span style="color: #003399;">Collections</span>.<span style="color: #006633;">EMPTY_MAP</span>, factory <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		        newQueryTranslator.<span style="color: #006633;">compile</span><span style="color: #009900;">&#40;</span> <span style="color: #003399;">Collections</span>.<span style="color: #006633;">EMPTY_MAP</span>, <span style="color: #000066; font-weight: bold;">false</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		        <span style="color: #000000; font-weight: bold;">return</span> newQueryTranslator.<span style="color: #006633;">getSQLString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
	    	<span style="color: #009900;">&#125;</span>
&nbsp;
		    <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">static</span> HqlToSqlTranslator translator <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HqlToSqlTranslator<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> StringUtils<span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> format<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">Date</span> date, <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> dateformat<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>date <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">SimpleDateFormat</span> sdf <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">SimpleDateFormat</span><span style="color: #009900;">&#40;</span>dateformat<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">return</span> sdf.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>date<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;!</span>DOCTYPE html <span style="color: #000000; font-weight: bold;">PUBLIC</span> <span style="color: #0000ff;">&quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;</span> <span style="color: #0000ff;">&quot;http://www.w3.org/TR/html4/loose.dtd&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>meta http<span style="color: #339933;">-</span>equiv<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Content-Type&quot;</span> content<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/html; charset=UTF-8&quot;</span><span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>title<span style="color: #339933;">&gt;</span>Hibernate statistics<span style="color: #339933;">&lt;/</span>title<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>style<span style="color: #339933;">&gt;</span>
.<span style="color: #006633;">c</span><span style="color: #009900;">&#123;</span>
	text<span style="color: #339933;">-</span>align<span style="color: #339933;">:</span> center<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
.<span style="color: #006633;">r</span><span style="color: #009900;">&#123;</span>
	text<span style="color: #339933;">-</span>align<span style="color: #339933;">:</span> right<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
.<span style="color: #006633;">l</span><span style="color: #009900;">&#123;</span>
	text<span style="color: #339933;">-</span>align<span style="color: #339933;">:</span> left<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
.<span style="color: #006633;">t</span><span style="color: #009900;">&#123;</span>
	vertical<span style="color: #339933;">-</span>align<span style="color: #339933;">:</span> top<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
.<span style="color: #006633;">b</span><span style="color: #009900;">&#123;</span>
	vertical<span style="color: #339933;">-</span>align<span style="color: #339933;">:</span> bottom<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
.<span style="color: #006633;">odd</span><span style="color: #009900;">&#123;</span>
	background<span style="color: #339933;">-</span>color<span style="color: #339933;">:</span> #D4D4D4<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
.<span style="color: #006633;">even</span><span style="color: #009900;">&#123;</span>
	background<span style="color: #339933;">-</span>color<span style="color: #339933;">:</span> #EEEEEE<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
.<span style="color: #006633;">bd1</span><span style="color: #009900;">&#123;</span>
	border<span style="color: #339933;">:</span> solid #<span style="color: #cc66cc;">888888</span> 1px<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
.<span style="color: #006633;">bg1</span><span style="color: #009900;">&#123;</span>
	background<span style="color: #339933;">-</span>color<span style="color: #339933;">:</span> #CCCCCC<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
.<span style="color: #006633;">bg2</span><span style="color: #009900;">&#123;</span>
	background<span style="color: #339933;">-</span>color<span style="color: #339933;">:</span> #DDDDDD<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
	<span style="color: #339933;">&lt;/</span>style<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;%</span>
	<span style="color: #000000; font-weight: bold;">final</span> ApplicationContext appContext <span style="color: #339933;">=</span> 
		WebApplicationContextUtils.<span style="color: #006633;">getRequiredWebApplicationContext</span><span style="color: #009900;">&#40;</span>getServletContext<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">final</span> SessionFactory sessionFactory <span style="color: #339933;">=</span> 
		<span style="color: #009900;">&#40;</span>SessionFactory<span style="color: #009900;">&#41;</span> appContext.<span style="color: #006633;">getBean</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hibernateSessionFactory&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">final</span> Statistics statistics <span style="color: #339933;">=</span> sessionFactory.<span style="color: #006633;">getStatistics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> action <span style="color: #339933;">=</span> request.<span style="color: #006633;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;do&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">final</span> StringBuilder info <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">512</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;activate&quot;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>action<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> 
			<span style="color: #339933;">!</span>statistics.<span style="color: #006633;">isStatisticsEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		statistics.<span style="color: #006633;">setStatisticsEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		activation <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		info.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Statistics enabled<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;deactivate&quot;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>action<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> 
			statistics.<span style="color: #006633;">isStatisticsEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		statistics.<span style="color: #006633;">setStatisticsEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		deactivation <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		info.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Statistics disabled<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;clear&quot;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>action<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		activation <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		deactivation <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		statistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Long</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Long</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Long</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Long</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Long</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Long</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">6</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Long</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">7</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Long</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">8</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Long</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		queryStatistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		entityStatistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		collectionStatistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		secondLevelCacheStatistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		info.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Statistics cleared<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">boolean</span> active <span style="color: #339933;">=</span> statistics.<span style="color: #006633;">isStatisticsEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>info.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;success&quot;</span><span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;%=</span>HTMLEscapeWriter.<span style="color: #006633;">escape</span><span style="color: #009900;">&#40;</span>info.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;</span>
			<span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;hibernate.jsp&quot;</span><span style="color: #339933;">&gt;</span>Reload<span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;hibernate.jsp?do=&lt;%=(active?&quot;</span>deactivate<span style="color: #0000ff;">&quot;:&quot;</span>activate<span style="color: #0000ff;">&quot;)%&gt;&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;%=</span><span style="color: #009900;">&#40;</span>active<span style="color: #339933;">?</span><span style="color: #0000ff;">&quot;DEACTIVATE&quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;ACTIVATE&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>a<span style="color: #339933;">&gt;</span> <span style="color: #339933;">|</span> 
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;hibernate.jsp?do=clear&quot;</span><span style="color: #339933;">&gt;</span>CLEAR<span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;%</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>active<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		lastUpdate <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">String</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> names<span style="color: #339933;">;</span>
&nbsp;
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, statistics.<span style="color: #006633;">getConnectCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, statistics.<span style="color: #006633;">getFlushCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span>, statistics.<span style="color: #006633;">getPrepareStatementCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span>, statistics.<span style="color: #006633;">getCloseStatementCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span>, statistics.<span style="color: #006633;">getSessionCloseCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span>, statistics.<span style="color: #006633;">getSessionOpenCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">6</span>, statistics.<span style="color: #006633;">getTransactionCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">7</span>, statistics.<span style="color: #006633;">getSuccessfulTransactionCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">8</span>, statistics.<span style="color: #006633;">getOptimisticFailureCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		queryStatistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		names <span style="color: #339933;">=</span> statistics.<span style="color: #006633;">getQueries</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>names<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> names.<span style="color: #006633;">length</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>names.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				queryStatistics.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>, 
					statistics.<span style="color: #006633;">getQueryStatistics</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		entityStatistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		names <span style="color: #339933;">=</span> statistics.<span style="color: #006633;">getEntityNames</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>names<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> names.<span style="color: #006633;">length</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>names.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				entityStatistics.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>, 
					statistics.<span style="color: #006633;">getEntityStatistics</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		collectionStatistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		names <span style="color: #339933;">=</span> statistics.<span style="color: #006633;">getCollectionRoleNames</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>names<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> names.<span style="color: #006633;">length</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>names.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				collectionStatistics.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>, 
					statistics.<span style="color: #006633;">getCollectionStatistics</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		secondLevelCacheStatistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		names <span style="color: #339933;">=</span> statistics.<span style="color: #006633;">getSecondLevelCacheRegionNames</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>names<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> names.<span style="color: #006633;">length</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>names.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				secondLevelCacheStatistics.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>, 
					statistics.<span style="color: #006633;">getSecondLevelCacheStatistics</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #339933;">%&gt;</span>
	<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
	Last update<span style="color: #339933;">:</span> <span style="color: #339933;">&lt;%=</span><span style="color: #009900;">&#40;</span>lastUpdate<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">?</span>
		StringUtils.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>lastUpdate, <span style="color: #0000ff;">&quot;dd.MM.yy HH:mm:ss&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;none&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;</span>br<span style="color: #339933;">/&gt;</span>
	Activation<span style="color: #339933;">:</span> <span style="color: #339933;">&lt;%=</span><span style="color: #009900;">&#40;</span>activation<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">?</span>
		StringUtils.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>activation, <span style="color: #0000ff;">&quot;dd.MM.yy HH:mm:ss&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;none&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;</span>br<span style="color: #339933;">/&gt;</span>
	Deactivation<span style="color: #339933;">:</span> <span style="color: #339933;">&lt;%=</span><span style="color: #009900;">&#40;</span>deactivation<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">?</span>
		StringUtils.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>deactivation, <span style="color: #0000ff;">&quot;dd.MM.yy HH:mm:ss&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;none&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;</span>br<span style="color: #339933;">/&gt;</span>
	Active duration<span style="color: #339933;">:</span> <span style="color: #339933;">&lt;%=</span><span style="color: #009900;">&#40;</span>activation<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">?</span>
		StringUtils.<span style="color: #006633;">formatTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>deactivation<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">?</span>
			deactivation.<span style="color: #006633;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>
			<span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span>activation.<span style="color: #006633;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>
			<span style="color: #0000ff;">&quot;none&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;</span>
	<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;%</span>
	<span style="color: #000066; font-weight: bold;">boolean</span> hasGeneral <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">9</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">longValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			hasGeneral <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>hasGeneral<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>table<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Connects<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Flushes<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Prepare statements<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Close statements<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Session opens<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Session closes<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Total Transactions<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">6</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Successfull Transactions<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">7</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Optimistic failures<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;/</span>table<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
		<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #339933;">%&gt;</span>
&nbsp;
	<span style="color: #339933;">&lt;%</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>queryStatistics.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>table width<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;100%&quot;</span><span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;&lt;</span>th colspan<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;11&quot;</span> <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg2&quot;</span><span style="color: #339933;">&gt;</span>Query statistics<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>HQL Query<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>SQL Query<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Calls<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Total rowcount<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Max dur.<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Min dur.<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Avg dur.<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Total dur.<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Cache hits<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Cache miss<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Cache put<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;%</span>
		QueryStatistics queryStats<span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">boolean</span> odd <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> query<span style="color: #339933;">:</span>queryStatistics.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			queryStats <span style="color: #339933;">=</span> queryStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #339933;">%&gt;</span>
			<span style="color: #339933;">&lt;</span>tr <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;%=(odd?&quot;</span>odd<span style="color: #0000ff;">&quot;:&quot;</span>even<span style="color: #0000ff;">&quot;)%&gt;&quot;</span><span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">&gt;&lt;%=</span>query<span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;</span>small<span style="color: #339933;">&gt;&lt;%=</span>translator.<span style="color: #006633;">toSql</span><span style="color: #009900;">&#40;</span>sessionFactory, query<span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>small<span style="color: #339933;">&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getExecutionCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getExecutionRowCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getExecutionMaxTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getExecutionMinTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getExecutionAvgTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">&gt;</span>
					<span style="color: #339933;">&lt;%=</span>queryStats.<span style="color: #006633;">getExecutionAvgTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>queryStats.<span style="color: #006633;">getExecutionCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;</span>
				<span style="color: #339933;">&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getCacheHitCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getCacheMissCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getCachePutCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;%</span>
			odd <span style="color: #339933;">=</span> <span style="color: #339933;">!</span>odd<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;/</span>table<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>entityStatistics.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>table width<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;100%&quot;</span><span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;&lt;</span>th colspan<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;7&quot;</span> <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg2&quot;</span><span style="color: #339933;">&gt;</span>Entity statistics<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Entity<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Loads<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Fetches<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Inserts<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Updates<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Deletes<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Optimistic failures<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;%</span>
		EntityStatistics entityStats<span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">boolean</span> odd <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> entity<span style="color: #339933;">:</span>entityStatistics.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			entityStats <span style="color: #339933;">=</span> entityStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>entity<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #339933;">%&gt;</span>
			<span style="color: #339933;">&lt;</span>tr <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;%=(odd?&quot;</span>odd<span style="color: #0000ff;">&quot;:&quot;</span>even<span style="color: #0000ff;">&quot;)%&gt;&quot;</span><span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entity<span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entityStats.<span style="color: #006633;">getLoadCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entityStats.<span style="color: #006633;">getFetchCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entityStats.<span style="color: #006633;">getInsertCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entityStats.<span style="color: #006633;">getUpdateCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entityStats.<span style="color: #006633;">getDeleteCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entityStats.<span style="color: #006633;">getOptimisticFailureCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;%</span>
			odd <span style="color: #339933;">=</span> <span style="color: #339933;">!</span>odd<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;/</span>table<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>collectionStatistics.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>table width<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;100%&quot;</span><span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;&lt;</span>th colspan<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;6&quot;</span> <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg2&quot;</span><span style="color: #339933;">&gt;</span>Collection statistics<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Role<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Loads<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Fetches<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Updates<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Recreate<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Remove<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;%</span>
		CollectionStatistics collectionStats<span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">boolean</span> odd <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> collection<span style="color: #339933;">:</span>collectionStatistics.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			collectionStats <span style="color: #339933;">=</span> collectionStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>collection<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #339933;">%&gt;</span>
			<span style="color: #339933;">&lt;</span>tr <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;%=(odd?&quot;</span>odd<span style="color: #0000ff;">&quot;:&quot;</span>even<span style="color: #0000ff;">&quot;)%&gt;&quot;</span><span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>collection<span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>collectionStats.<span style="color: #006633;">getLoadCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>collectionStats.<span style="color: #006633;">getFetchCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>collectionStats.<span style="color: #006633;">getUpdateCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>collectionStats.<span style="color: #006633;">getRecreateCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>collectionStats.<span style="color: #006633;">getRemoveCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;%</span>
			odd <span style="color: #339933;">=</span> <span style="color: #339933;">!</span>odd<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;/</span>table<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>secondLevelCacheStatistics.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">long</span> totalSizeInMemory <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>table width<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;100%&quot;</span><span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;&lt;</span>th colspan<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;7&quot;</span> <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg2&quot;</span><span style="color: #339933;">&gt;</span>2nd level cache statistics<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Regionname<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Puts<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Hits<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Misses<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Elements in memory<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Size in memory<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Elements on disk<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;%</span>
		SecondLevelCacheStatistics cacheStats<span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">boolean</span> odd <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> cache<span style="color: #339933;">:</span>secondLevelCacheStatistics.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			cacheStats <span style="color: #339933;">=</span> secondLevelCacheStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>cache<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			totalSizeInMemory <span style="color: #339933;">+=</span> cacheStats.<span style="color: #006633;">getSizeInMemory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #339933;">%&gt;</span>
			<span style="color: #339933;">&lt;</span>tr <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;%=(odd?&quot;</span>odd<span style="color: #0000ff;">&quot;:&quot;</span>even<span style="color: #0000ff;">&quot;)%&gt;&quot;</span><span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cache<span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cacheStats.<span style="color: #006633;">getPutCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cacheStats.<span style="color: #006633;">getHitCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cacheStats.<span style="color: #006633;">getMissCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cacheStats.<span style="color: #006633;">getElementCountInMemory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cacheStats.<span style="color: #006633;">getSizeInMemory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cacheStats.<span style="color: #006633;">getElementCountOnDisk</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;%</span>
			odd <span style="color: #339933;">=</span> <span style="color: #339933;">!</span>odd<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #339933;">%&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td colspan<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;5&quot;</span><span style="color: #339933;">&gt;&amp;</span>nbsp<span style="color: #339933;">;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>totalSizeInMemory<span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&amp;</span>nbsp<span style="color: #339933;">;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;/</span>table<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://narcanti.keyboardsamurais.de/hibernate-statistics-jsp-reloaded.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate HQL to SQL Translation</title>
		<link>http://narcanti.keyboardsamurais.de/hibernate-hql-to-sql-translation.html</link>
		<comments>http://narcanti.keyboardsamurais.de/hibernate-hql-to-sql-translation.html#comments</comments>
		<pubDate>Thu, 08 Jan 2009 20:40:47 +0000</pubDate>
		<dc:creator>Secco</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[hql]]></category>
		<category><![CDATA[hql to sql]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://narcanti.keyboardsamurais.de/?p=370</guid>
		<description><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/>For debugging purposes using hibernate it&#8217;s often usefull to have the generated SQL query to an appropriate HQL query. But setting the hibernate configuration hibernate.show_sql to true leads to logging any query made within an application (which can be a lot in some applications). With the following class the hibernate API is used to generate [...]]]></description>
			<content:encoded><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/><p>For debugging purposes using hibernate it&#8217;s often usefull to have the generated SQL query to an appropriate HQL query.<br />
But setting the hibernate configuration hibernate.show_sql to true leads to logging <i>any</i> query made within an application (which can be a lot in some applications). With the following class the hibernate API is used to generate the correct SQL query from a given HQL query and can be used anywhere to log the generated query.<br />
<span id="more-370"></span><br />
Of course, for that work to be done, the class needs a reference to the SessionFactory.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.SessionFactory</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.engine.SessionFactoryImplementor</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.hql.QueryTranslator</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.hql.QueryTranslatorFactory</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.hql.ast.ASTQueryTranslatorFactory</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HqlToSqlTranslator <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">private</span> SessionFactory sessionFactory<span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setSessionFactory<span style="color: #009900;">&#40;</span>SessionFactory sessionFactory<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">sessionFactory</span> <span style="color: #339933;">=</span> sessionFactory<span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> toSql<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> hqlQueryText<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>hqlQueryText<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> hqlQueryText.<span style="color: #006633;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">final</span> QueryTranslatorFactory translatorFactory <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ASTQueryTranslatorFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">final</span> SessionFactoryImplementor factory <span style="color: #339933;">=</span> 
        <span style="color: #009900;">&#40;</span>SessionFactoryImplementor<span style="color: #009900;">&#41;</span> sessionFactory<span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">final</span> QueryTranslator translator <span style="color: #339933;">=</span> translatorFactory.
        <span style="color: #006633;">createQueryTranslator</span><span style="color: #009900;">&#40;</span>
          hqlQueryText, 
          hqlQueryText, 
          <span style="color: #003399;">Collections</span>.<span style="color: #006633;">EMPTY_MAP</span>, factory
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      translator.<span style="color: #006633;">compile</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Collections</span>.<span style="color: #006633;">EMPTY_MAP</span>, <span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">return</span> translator.<span style="color: #006633;">getSQLString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://narcanti.keyboardsamurais.de/hibernate-hql-to-sql-translation.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hibernate and Spring DAO Templates</title>
		<link>http://narcanti.keyboardsamurais.de/hibernate-and-spring-dao-templates.html</link>
		<comments>http://narcanti.keyboardsamurais.de/hibernate-and-spring-dao-templates.html#comments</comments>
		<pubDate>Tue, 06 May 2008 17:39:09 +0000</pubDate>
		<dc:creator>Secco</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://narcanti.keyboardsamurais.de/hibernate-and-spring-dao-templates.html</guid>
		<description><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/>H&#228;ufig genutzt, einmal notiert: Interface und abstrakte Implementierung von DAOs zur Benutzung mit Spring und Hibernate. package project.dao; &#160; import java.io.Serializable; import java.util.List; &#160; /** * D = domain object&#60;br/&#62; * K = Primary key of domain object, eg. Long&#60;br/&#62; * &#60;p/&#62; * @author M. Serhat Cinar * */ public interface Dao&#60;D, K extends Serializable&#62; [...]]]></description>
			<content:encoded><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/><p>H&#228;ufig genutzt, einmal notiert: Interface und abstrakte Implementierung von DAOs zur Benutzung mit Spring und Hibernate.<br />
<span id="more-269"></span></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">project.dao</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.Serializable</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.List</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * D = domain object&lt;br/&gt;
 * K = Primary key of domain object, eg. Long&lt;br/&gt;
 * &lt;p/&gt;
 * @author M. Serhat Cinar
 *
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> Dao<span style="color: #339933;">&lt;</span>D, K <span style="color: #000000; font-weight: bold;">extends</span> Serializable<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> D getById<span style="color: #009900;">&#40;</span>K id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> save<span style="color: #009900;">&#40;</span>D d<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> delete<span style="color: #009900;">&#40;</span>D d<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> List<span style="color: #339933;">&lt;</span>D<span style="color: #339933;">&gt;</span> getAll<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> offset, <span style="color: #000066; font-weight: bold;">int</span> amount<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> List<span style="color: #339933;">&lt;</span>D<span style="color: #339933;">&gt;</span> getAll<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> offset, <span style="color: #000066; font-weight: bold;">int</span> amount, <span style="color: #003399;">String</span> orderBy, <span style="color: #000066; font-weight: bold;">boolean</span> asc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * Count of all available objects
	 * 
	 * @return Anzahl
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">long</span> getTotalCount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">project.dao.hibernate</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.Serializable</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.List</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.commons.logging.Log</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.commons.logging.LogFactory</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.Session</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.hibernate.SessionFactory</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">project.dao.Dao</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * 
 * @author M. Serhat Cinar
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">class</span> AbstractDaoImpl<span style="color: #339933;">&lt;</span>D, K <span style="color: #000000; font-weight: bold;">extends</span> Serializable<span style="color: #339933;">&gt;</span> <span style="color: #000000; font-weight: bold;">implements</span> Dao<span style="color: #339933;">&lt;</span>D, K<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> Log LOG <span style="color: #339933;">=</span> LogFactory.<span style="color: #006633;">getLog</span><span style="color: #009900;">&#40;</span>getClass<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> SessionFactory sessionFactory<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setSessionFactory<span style="color: #009900;">&#40;</span>SessionFactory sessionFactory<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">sessionFactory</span> <span style="color: #339933;">=</span> sessionFactory<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">protected</span> Session getCurrentSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> sessionFactory.<span style="color: #006633;">getCurrentSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> delete<span style="color: #009900;">&#40;</span>D d<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		getCurrentSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">delete</span><span style="color: #009900;">&#40;</span>d<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@SuppressWarnings<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;unchecked&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> List<span style="color: #339933;">&lt;</span>D<span style="color: #339933;">&gt;</span> getAll<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> offset, <span style="color: #000066; font-weight: bold;">int</span> amount<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;getAll(&quot;</span><span style="color: #339933;">+</span>offset<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;,&quot;</span><span style="color: #339933;">+</span>amount<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		List<span style="color: #339933;">&lt;</span>D<span style="color: #339933;">&gt;</span> list <span style="color: #339933;">=</span> getCurrentSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
			.<span style="color: #006633;">createQuery</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;FROM &quot;</span><span style="color: #339933;">+</span>getDomain<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getSimpleName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			.<span style="color: #006633;">setMaxResults</span><span style="color: #009900;">&#40;</span>amount<span style="color: #009900;">&#41;</span>
			.<span style="color: #006633;">setFirstResult</span><span style="color: #009900;">&#40;</span>offset<span style="color: #009900;">&#41;</span>
			<span style="color: #666666; font-style: italic;">//.setFetchSize(amount)</span>
			.<span style="color: #006633;">list</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;found &quot;</span><span style="color: #339933;">+</span>list.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot; datasets&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> list<span style="color: #339933;">;</span> 
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@SuppressWarnings<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;unchecked&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> List<span style="color: #339933;">&lt;</span>D<span style="color: #339933;">&gt;</span> getAll<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> offset, <span style="color: #000066; font-weight: bold;">int</span> amount, <span style="color: #003399;">String</span> orderBy, <span style="color: #000066; font-weight: bold;">boolean</span> asc<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;getAll(&quot;</span><span style="color: #339933;">+</span>offset<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;,&quot;</span><span style="color: #339933;">+</span>amount<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;,&quot;</span><span style="color: #339933;">+</span>orderBy<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;,&quot;</span><span style="color: #339933;">+</span>
				<span style="color: #009900;">&#40;</span>asc<span style="color: #339933;">?</span><span style="color: #0000ff;">&quot;asc&quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;desc&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		List<span style="color: #339933;">&lt;</span>D<span style="color: #339933;">&gt;</span> list <span style="color: #339933;">=</span> getCurrentSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
			.<span style="color: #006633;">createQuery</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;FROM &quot;</span><span style="color: #339933;">+</span>getDomain<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getSimpleName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>
				<span style="color: #0000ff;">&quot; d ORDER BY d.&quot;</span><span style="color: #339933;">+</span>orderBy<span style="color: #339933;">+</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>asc<span style="color: #339933;">?</span><span style="color: #0000ff;">&quot;ASC&quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;DESC&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			.<span style="color: #006633;">setMaxResults</span><span style="color: #009900;">&#40;</span>amount<span style="color: #009900;">&#41;</span>
			.<span style="color: #006633;">setFirstResult</span><span style="color: #009900;">&#40;</span>offset<span style="color: #009900;">&#41;</span>
			<span style="color: #666666; font-style: italic;">//.setFetchSize(amount)</span>
			.<span style="color: #006633;">list</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>LOG.<span style="color: #006633;">isDebugEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			LOG.<span style="color: #006633;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;found &quot;</span><span style="color: #339933;">+</span>list.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot; datasets&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> list<span style="color: #339933;">;</span> 
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@SuppressWarnings<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;unchecked&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> D getById<span style="color: #009900;">&#40;</span>K id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>id<span style="color: #339933;">==</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span>D<span style="color: #009900;">&#41;</span> getCurrentSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>getDomain<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * Returns the domain class of this DAO. That's the class which is processed by this DAO.
	 * 
	 * @return domainclass of this DAO
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">Class</span> getDomain<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">long</span> getTotalCount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003399;">Object</span> result <span style="color: #339933;">=</span> getCurrentSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
			.<span style="color: #006633;">createQuery</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT COUNT(d.id) FROM &quot;</span><span style="color: #339933;">+</span>
				getDomain<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getSimpleName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot; d&quot;</span><span style="color: #009900;">&#41;</span>
			.<span style="color: #006633;">setMaxResults</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>
			.<span style="color: #006633;">uniqueResult</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>result<span style="color: #339933;">==</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">return</span> 0L<span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>result <span style="color: #000000; font-weight: bold;">instanceof</span> <span style="color: #003399;">Integer</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Integer</span><span style="color: #009900;">&#41;</span> result<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">longValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Long</span><span style="color: #009900;">&#41;</span> result<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">longValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> save<span style="color: #009900;">&#40;</span>D d<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		getCurrentSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">saveOrUpdate</span><span style="color: #009900;">&#40;</span>d<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://narcanti.keyboardsamurais.de/hibernate-and-spring-dao-templates.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>UTF H&#246;lle mit mySQL</title>
		<link>http://narcanti.keyboardsamurais.de/utf-holle-mit-mysql.html</link>
		<comments>http://narcanti.keyboardsamurais.de/utf-holle-mit-mysql.html#comments</comments>
		<pubDate>Thu, 10 Jan 2008 19:26:57 +0000</pubDate>
		<dc:creator>Secco</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[entity]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[unicode]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://narcanti.keyboardsamurais.de/utf-holle-mit-mysql.html</guid>
		<description><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/>Internationalisierung wird sicherlich ganz einfach mit Unicode und UTF, dachte ich mir, zumal mySQL ab Version 4.1 Unicode unterst&#252;tzt. Und versank in einem Haufen von undokumentierten Bugs, bis ich die dicke Keule auspackte. Das Problem begann mit einem kurzen polnischen Text. W&#228;hrend meine Anwendung f&#252;r deutsche Sonderzeichen schon mehrfach getestet und als funktionsf&#228;hig befunden wurde, [...]]]></description>
			<content:encoded><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/><p>Internationalisierung wird sicherlich ganz einfach mit Unicode und UTF, dachte ich mir, zumal mySQL ab Version 4.1 Unicode unterst&#252;tzt. Und versank in einem Haufen von undokumentierten Bugs, bis ich die dicke Keule auspackte.<br />
<span id="more-257"></span><br />
Das Problem begann mit einem kurzen polnischen Text. W&#228;hrend meine Anwendung f&#252;r deutsche Sonderzeichen schon mehrfach getestet und als funktionsf&#228;hig befunden wurde, begannen die Probleme mit mir bis dato unbekannten Sonderzeichen. Der Text sollte eigentlich &#8220;W&#322;a&#347;nie &#8230;&#8221; hei&#223;en, zeigte sich aber in der Anwendung als &#8220;W?a?nie&#8221;.<br />
Dabei hatte ich die Datenbank (mySQL) an mehreren Stellen auf UTF bzw. Unicode umgestellt. Jedoch waren die Tabellen und Spalten peu Ã  peu gewachsen und urspr&#252;nglich nicht in UTF. Komischerweise wurden in einigen F&#228;llen die Daten in der Datenbank als Unicode-Escapes gespeichert, also als &#8220;W&amp;#322;a&amp;#347;&#8221;, in einem anderen Fall aber nicht.</p>
<p>Viel Recherchearbeit war n&#246;tig, um in der Webanwendung u. a. &#220;bertragungsprobleme auszuschlie&#223;en, zu denen es L&#246;sungen gibt, wie</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span> value <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#40;</span>request.<span style="color: #006633;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getBytes</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ISO-8859-1&quot;</span><span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Der Fehler lag in meinem Falle definitiv beim Speichern. Also versuchte ich mit unz&#228;hligen Versuchen die Datenbank dazu zu &#252;berreden, die Daten korrekt zu speichern.<br />
Auch ein <code>mysql --default-character-set=utf8</code> und ein Umstellen mehrerer Characterset und Collation Attribute auf utf8 brachte nichts.</p>
<p>Dann entdeckte ich im Netz, dass man die Zeichenkodierung in mySQL mit zus&#228;tzlichen Parametern im Connectionstring beim Verbindungsaufbau beeinflussen kann:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">useUnicode<span style="color: #339933;">=</span>true<span style="color: #339933;">&amp;</span>characterEncoding<span style="color: #339933;">=</span>utf8<span style="color: #339933;">&amp;</span>characterResultSets<span style="color: #339933;">=</span>utf8
<span style="color: #000000; font-weight: bold;">Class</span>.<span style="color: #006633;">forName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;com.mysql.jdbc.Driver&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">newInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
conn <span style="color: #339933;">=</span> <span style="color: #003399;">DriverManager</span>.<span style="color: #006633;">getConnection</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;jdbc:mysql://localhost/db?user=blah&amp;password=blah&amp;
  useUnicode=true&amp;characterEncoding=UTF-8&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Diese kann man in den Hibernate-Properties (hier in Spring) wie folgt einbetten:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;hibernateProperties&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;props<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.dialect&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        org.hibernate.dialect.MySQLInnoDBDialect
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.show_sql&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.hbm2ddl.auto&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>update<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.cache.use_second_level_cache&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.cache.provider_class&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        org.hibernate.cache.EhCacheProvider
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.cache.use_query_cache&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.current_session_context_class&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>thread<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;connection.provider_class&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        org.hibernate.connection.C3P0ConnectionProvider
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.connection.useUnicode&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.connection.characterEncoding&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>utf8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.connection.characterSetResults&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>utf8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prop</span> <span style="color: #000066;">key</span>=<span style="color: #ff0000;">&quot;hibernate.connection.clobCharacterEncoding&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>utf8<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prop<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
..</pre></div></div>

<p>Aber auch das half bei mir nicht. Und auch Tipps wie von <a href="http://www.it-blogger.com/2005-08-13/mysql-hibernate-und-utf8/">frank</a> und <a href="http://golgote.freeflux.net/blog/?q=mysql">golgote</a> halfen nicht.</p>
<p>Letzten Endes entschied ich mich f&#252;r einen Weg, der sicherlich nicht der Sch&#246;nste ist, aber in meinem Fall schnell funktionierte:</p>
<p>Ich schrieb zwei Methoden, mit denen ich einen String mit Unicode-Entities de- und enkodieren kann, also aus &#8220;W&#322;a&#347;nie&#8221; &#8220;W&amp;#322;a&amp;#347;&#8221; mache. Und dies wird dann in der Datenbank gespeichert. Somit sind alle Texte auf den ASCII-Zeichensatz reduziert. Schnell ist sie auch umgesetzt: Statt in Hibernate die Methoden get/setContent auf die entsprechende Spalte zu mappen, wird die Hilfsmethode get/setAsciifiedContent benutzt.</p>
<p>Sicherlich ist dies einer der &#8220;dirtiesten&#8221; Hacks, die ich benutzt habe, aber auf die Schnelle das Problem f&#252;r mehrere heterogene Systeme zu l&#246;sen lie&#223; mir hier nicht viel mehr Wahl.</p>
<p>Die Nachteile liegen offen auf der Hand:<br />
In Unicode k&#246;nnen Zeichen mit bis zu 4 Bytes dargestellt werden. Das macht in einer Entity 4*2 Zeichen (f&#252;r die Hexadezimaldarstellung) plus 4 f&#252;r die Symbole &#8220;&#x;&#8221;, also bis zu 12 ASCII-Zeichen pro Sonderzeichen.<br />
Bei Suchen auf dieses Feld k&#246;nnen die SQL-spezifischen Hilfsmittel (Wildcards, Regex) nicht mehr so einfach benutzt werden, Suchbegriffe m&#252;ssen ebenfalls vorher Kodiert werden.</p>
<p>Die alternative w&#228;re die Base64-Kodierung gewesen, aber da kann man nicht &#8220;mal&#8221; einen Blick in die Datenbank werfen.</p>
<p>Hier die Methoden zum de-/kodieren der Entities (alte Schule des Zustandsautomaten).</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * Will decode unicode escapes to character.
 * &amp;amp;#228; will be converted to &amp;#228;. Also supports hex-unicode like
 * &amp;amp;#xE4; for &amp;amp;#228;.&lt;br/&gt;
 * No support for named entities.
 * 
 * @param encoded
 * @return
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> 
	<span style="color: #003399;">String</span> decodeUnicodeEntities<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> encoded<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>encoded<span style="color: #339933;">==</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">final</span> StringBuilder target <span style="color: #339933;">=</span> 
		<span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span>encoded.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">char</span> c<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">final</span> StringBuilder entityBuffer <span style="color: #339933;">=</span> 
		<span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> state_normal <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> state_was_ampersand <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> state_in_entity_code <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">int</span> state <span style="color: #339933;">=</span> state_normal<span style="color: #339933;">;</span> 
	<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>encoded.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
		i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
		c <span style="color: #339933;">=</span> encoded.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">switch</span><span style="color: #009900;">&#40;</span>state<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">case</span> state_normal<span style="color: #339933;">:</span>
			<span style="color: #000000; font-weight: bold;">default</span><span style="color: #339933;">:</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>c<span style="color: #339933;">==</span><span style="color: #0000ff;">'&amp;'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					state <span style="color: #339933;">=</span> state_was_ampersand<span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
					target.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">case</span> state_was_ampersand<span style="color: #339933;">:</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>c<span style="color: #339933;">==</span><span style="color: #0000ff;">'#'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					state <span style="color: #339933;">=</span> state_in_entity_code<span style="color: #339933;">;</span>
					entityBuffer.
						<span style="color: #006633;">delete</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, entityBuffer.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
					state  <span style="color: #339933;">=</span> state_normal<span style="color: #339933;">;</span>
					target.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&amp;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">case</span> state_in_entity_code<span style="color: #339933;">:</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>c<span style="color: #339933;">==</span><span style="color: #0000ff;">';'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					<span style="color: #666666; font-style: italic;">// end of entity</span>
					<span style="color: #000066; font-weight: bold;">int</span> value<span style="color: #339933;">;</span>
					<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;x&quot;</span>.<span style="color: #006633;">equalsIgnoreCase</span><span style="color: #009900;">&#40;</span>
						entityBuffer.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// hex</span>
						value <span style="color: #339933;">=</span> <span style="color: #003399;">Integer</span>.<span style="color: #006633;">parseInt</span><span style="color: #009900;">&#40;</span>
							entityBuffer.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">16</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
					<span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
						value <span style="color: #339933;">=</span> <span style="color: #003399;">Integer</span>.<span style="color: #006633;">parseInt</span><span style="color: #009900;">&#40;</span>
							entityBuffer.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
					target.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>
						<span style="color: #003399;">Character</span>.<span style="color: #006633;">toChars</span><span style="color: #009900;">&#40;</span>value<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					state <span style="color: #339933;">=</span> state_normal<span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
					<span style="color: #666666; font-style: italic;">// within entity</span>
					entityBuffer.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">return</span> target.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> 
	encodeUnicodeEntities<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> uncoded<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>uncoded<span style="color: #339933;">==</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">char</span> c<span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">int</span> ci<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">final</span> StringBuilder target <span style="color: #339933;">=</span> 
		<span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span>uncoded.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">7</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>uncoded.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		c <span style="color: #339933;">=</span> uncoded.<span style="color: #006633;">charAt</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		ci <span style="color: #339933;">=</span> 0xffff <span style="color: #339933;">&amp;</span> c<span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>ci <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">160</span> <span style="color: #339933;">||</span> c<span style="color: #339933;">==</span><span style="color: #0000ff;">'&amp;'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// Not 7 Bit use the unicode system</span>
			target.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&amp;#&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			target.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Integer</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span>ci<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			target.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">';'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// nothing special only 7 Bit</span>
			target.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">return</span> target.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://narcanti.keyboardsamurais.de/utf-holle-mit-mysql.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Hibernate Statistics JSP</title>
		<link>http://narcanti.keyboardsamurais.de/hibernate-statistics-jsp.html</link>
		<comments>http://narcanti.keyboardsamurais.de/hibernate-statistics-jsp.html#comments</comments>
		<pubDate>Sun, 14 Oct 2007 13:27:43 +0000</pubDate>
		<dc:creator>Secco</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://narcanti.keyboardsamurais.de/hibernate-statistics-jsp.html</guid>
		<description><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/>Neulich zusammen gefummelt und als sinnvoll empfunden: Eine JSP die alle Hibernate-Statistiken aktivieren/deaktivieren und anzeigen kann. Dieser Artikel wurde durch den neueren Artikel Hibernate Statistics JSP Reloaded abgel&#246;st Die JSP benutzt lediglich zwei Methoden, die hier nicht mitgeliefert werden, aber trivial sind: StringUtils.format(Date date, String format) zum formatierten Darstellen eines Datums und meine in einem [...]]]></description>
			<content:encoded><![CDATA[<img src="http://narcanti.keyboardsamurais.de/images/category-icons/java-small.gif" width="25" height="40" alt="" title="Java" /><br/><p>Neulich zusammen gefummelt und als sinnvoll empfunden: Eine JSP die alle Hibernate-Statistiken aktivieren/deaktivieren und anzeigen kann. <i>Dieser Artikel wurde durch den neueren Artikel <a href="http://narcanti.keyboardsamurais.de/hibernate-statistics-jsp-reloaded.html">Hibernate Statistics JSP Reloaded</a> abgel&#246;st</i><br />
<span id="more-246"></span><br />
Die JSP benutzt lediglich zwei Methoden, die hier nicht mitgeliefert werden, aber trivial sind:<br />
StringUtils.format(Date date, String format) zum formatierten Darstellen eines Datums und meine in einem anderen Eintrag bereits vorgestellten HTMLEscapeWriter.<br />
Au&#223;erdem muss die JSP Seite irgenwie Zugriff auf die SessionFactory f&#252;r Hibernate zugriff haben.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;narcanti.service.Services&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;java.util.*&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;%</span>@ page language<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;java&quot;</span> contentType<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/html; charset=UTF-8&quot;</span> pageEncoding<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;narcanti.util.HTMLEscapeWriter&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.hibernate.SessionFactory&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.hibernate.stat.Statistics&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;narcanti.util.StringUtils&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.hibernate.stat.QueryStatistics&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;java.text.Collator&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.hibernate.stat.EntityStatistics&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.hibernate.stat.CollectionStatistics&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>jsp<span style="color: #339933;">:</span>directive.<span style="color: #006633;">page</span> <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;org.hibernate.stat.SecondLevelCacheStatistics&quot;</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;%!</span>
	<span style="color: #000000; font-weight: bold;">static</span> Map<span style="color: #339933;">&lt;</span>String, QueryStatistics<span style="color: #339933;">&gt;</span> queryStatistics <span style="color: #339933;">=</span> 
		<span style="color: #003399;">Collections</span>.<span style="color: #006633;">synchronizedMap</span><span style="color: #009900;">&#40;</span>
		<span style="color: #000000; font-weight: bold;">new</span> TreeMap<span style="color: #339933;">&lt;</span>String, QueryStatistics<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Collator</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">static</span> Map<span style="color: #339933;">&lt;</span>String, EntityStatistics<span style="color: #339933;">&gt;</span> entityStatistics <span style="color: #339933;">=</span> 
		<span style="color: #003399;">Collections</span>.<span style="color: #006633;">synchronizedMap</span><span style="color: #009900;">&#40;</span>
		<span style="color: #000000; font-weight: bold;">new</span> TreeMap<span style="color: #339933;">&lt;</span>String, EntityStatistics<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Collator</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">static</span> Map<span style="color: #339933;">&lt;</span>String, CollectionStatistics<span style="color: #339933;">&gt;</span> collectionStatistics <span style="color: #339933;">=</span> 
		<span style="color: #003399;">Collections</span>.<span style="color: #006633;">synchronizedMap</span><span style="color: #009900;">&#40;</span>
		<span style="color: #000000; font-weight: bold;">new</span> TreeMap<span style="color: #339933;">&lt;</span>String, CollectionStatistics<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Collator</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">static</span> Map<span style="color: #339933;">&lt;</span>String, SecondLevelCacheStatistics<span style="color: #339933;">&gt;</span> secondLevelCacheStatistics <span style="color: #339933;">=</span> 
		<span style="color: #003399;">Collections</span>.<span style="color: #006633;">synchronizedMap</span><span style="color: #009900;">&#40;</span>
		<span style="color: #000000; font-weight: bold;">new</span> TreeMap<span style="color: #339933;">&lt;</span>String, SecondLevelCacheStatistics<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Collator</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">static</span> List<span style="color: #339933;">&lt;</span>Long<span style="color: #339933;">&gt;</span> generalStatistics <span style="color: #339933;">=</span> 
		<span style="color: #003399;">Collections</span>.<span style="color: #006633;">synchronizedList</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>Long<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">18</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">static</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">9</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			generalStatistics.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Long</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">Date</span> lastUpdate<span style="color: #339933;">;</span>
<span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;!</span>DOCTYPE html <span style="color: #000000; font-weight: bold;">PUBLIC</span> <span style="color: #0000ff;">&quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;</span> <span style="color: #0000ff;">&quot;http://www.w3.org/TR/html4/loose.dtd&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>meta http<span style="color: #339933;">-</span>equiv<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Content-Type&quot;</span> content<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/html; charset=UTF-8&quot;</span><span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>title<span style="color: #339933;">&gt;</span>Hibernate statistics<span style="color: #339933;">&lt;/</span>title<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>link href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;../default.css&quot;</span> rel<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;stylesheet&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/css&quot;</span><span style="color: #339933;">&gt;&lt;/</span>link<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;%</span>
	<span style="color: #003399;">String</span> action <span style="color: #339933;">=</span> request.<span style="color: #006633;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;do&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	StringBuilder errors <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">512</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	StringBuilder warnings <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">512</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	StringBuilder info <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">512</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// hier die Session Factory von Hibernate holen</span>
	SessionFactory sessionFactory <span style="color: #339933;">=</span> Services.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getSessionFactory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Statistics statistics <span style="color: #339933;">=</span> sessionFactory.<span style="color: #006633;">getStatistics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;activate&quot;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>action<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span>statistics.<span style="color: #006633;">isStatisticsEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		statistics.<span style="color: #006633;">setStatisticsEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		info.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Statistics enabled<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;deactivate&quot;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>action<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> statistics.<span style="color: #006633;">isStatisticsEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		statistics.<span style="color: #006633;">setStatisticsEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		info.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Statistics disabled<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">boolean</span> active <span style="color: #339933;">=</span> statistics.<span style="color: #006633;">isStatisticsEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>errors.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
		<span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;error&quot;</span><span style="color: #339933;">&gt;&lt;%=</span>HTMLEscapeWriter.<span style="color: #006633;">escape</span><span style="color: #009900;">&#40;</span>errors.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>warnings.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
		<span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;warn&quot;</span><span style="color: #339933;">&gt;&lt;%=</span>HTMLEscapeWriter.<span style="color: #006633;">escape</span><span style="color: #009900;">&#40;</span>warnings.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>info.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
		<span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;success&quot;</span><span style="color: #339933;">&gt;&lt;%=</span>HTMLEscapeWriter.<span style="color: #006633;">escape</span><span style="color: #009900;">&#40;</span>info.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;hibernate.jsp&quot;</span><span style="color: #339933;">&gt;</span>Reload<span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;hibernate.jsp?do=&lt;%=(active?&quot;</span>deactivate<span style="color: #0000ff;">&quot;:&quot;</span>activate<span style="color: #0000ff;">&quot;)%&gt;&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;%=</span><span style="color: #009900;">&#40;</span>active<span style="color: #339933;">?</span><span style="color: #0000ff;">&quot;DEACTIVATE&quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;ACTIVATE&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>a<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;%</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>active<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		lastUpdate <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">String</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> names<span style="color: #339933;">;</span>
&nbsp;
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, statistics.<span style="color: #006633;">getConnectCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, statistics.<span style="color: #006633;">getFlushCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span>, statistics.<span style="color: #006633;">getPrepareStatementCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span>, statistics.<span style="color: #006633;">getCloseStatementCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span>, statistics.<span style="color: #006633;">getSessionCloseCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span>, statistics.<span style="color: #006633;">getSessionOpenCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">6</span>, statistics.<span style="color: #006633;">getTransactionCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">7</span>, statistics.<span style="color: #006633;">getSuccessfulTransactionCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		generalStatistics.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">8</span>, statistics.<span style="color: #006633;">getOptimisticFailureCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		queryStatistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		names <span style="color: #339933;">=</span> statistics.<span style="color: #006633;">getQueries</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>names<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> names.<span style="color: #006633;">length</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>names.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				queryStatistics.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>, 
					statistics.<span style="color: #006633;">getQueryStatistics</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		entityStatistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		names <span style="color: #339933;">=</span> statistics.<span style="color: #006633;">getEntityNames</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>names<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> names.<span style="color: #006633;">length</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>names.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				entityStatistics.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>, 
					statistics.<span style="color: #006633;">getEntityStatistics</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		collectionStatistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		names <span style="color: #339933;">=</span> statistics.<span style="color: #006633;">getCollectionRoleNames</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>names<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> names.<span style="color: #006633;">length</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>names.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				collectionStatistics.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>, 
					statistics.<span style="color: #006633;">getCollectionStatistics</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		secondLevelCacheStatistics.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		names <span style="color: #339933;">=</span> statistics.<span style="color: #006633;">getSecondLevelCacheRegionNames</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>names<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> names.<span style="color: #006633;">length</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>names.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				secondLevelCacheStatistics.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>, 
					statistics.<span style="color: #006633;">getSecondLevelCacheStatistics</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #339933;">%&gt;</span>
	<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
	Last update<span style="color: #339933;">:</span> <span style="color: #339933;">&lt;%=</span><span style="color: #009900;">&#40;</span>lastUpdate<span style="color: #339933;">!=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">?</span>StringUtils.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>lastUpdate, 
		<span style="color: #0000ff;">&quot;dd.MM.yy HH:mm:ss&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;none&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;</span>
	<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;%</span>
	<span style="color: #000066; font-weight: bold;">boolean</span> hasGeneral <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">9</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">longValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			hasGeneral <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>hasGeneral<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>table<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Connects<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Flushes<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Prepare statements<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Close statements<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Session opens<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Session closes<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Total Transactions<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">6</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Successfull Transactions<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">7</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Optimistic failures<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>generalStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;/</span>table<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
		<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #339933;">%&gt;</span>
&nbsp;
	<span style="color: #339933;">&lt;%</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>queryStatistics.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>table width<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;100%&quot;</span><span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;&lt;</span>th colspan<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;10&quot;</span> <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg2&quot;</span><span style="color: #339933;">&gt;</span>Query statistics<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Query<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Calls<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Total rowcount<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Max dur.<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Min dur.<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Avg dur.<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Total dur.<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Cache hits<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Cache miss<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Cache put<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;%</span>
		Iterator<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> queryIter <span style="color: #339933;">=</span> queryStatistics.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">iterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">String</span> query<span style="color: #339933;">;</span>
		QueryStatistics queryStats<span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">boolean</span> odd <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>queryIter.<span style="color: #006633;">hasNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			query <span style="color: #339933;">=</span> queryIter.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			queryStats <span style="color: #339933;">=</span> queryStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #339933;">%&gt;</span>
			<span style="color: #339933;">&lt;</span>tr <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;%=(odd?&quot;</span>odd<span style="color: #0000ff;">&quot;:&quot;</span>even<span style="color: #0000ff;">&quot;)%&gt;&quot;</span><span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>query<span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getExecutionCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getExecutionRowCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getExecutionMaxTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getExecutionMinTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getExecutionAvgTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getExecutionAvgTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>queryStats.<span style="color: #006633;">getExecutionCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getCacheHitCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getCacheMissCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>queryStats.<span style="color: #006633;">getCachePutCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;%</span>
			odd <span style="color: #339933;">=</span> <span style="color: #339933;">!</span>odd<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;/</span>table<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>entityStatistics.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>table width<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;100%&quot;</span><span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;&lt;</span>th colspan<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;7&quot;</span> <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg2&quot;</span><span style="color: #339933;">&gt;</span>Entity statistics<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Entity<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Loads<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Fetches<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Inserts<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Updates<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Deletes<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Optimistic failures<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;%</span>
		Iterator<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> entityIter <span style="color: #339933;">=</span> entityStatistics.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">iterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">String</span> entity<span style="color: #339933;">;</span>
		EntityStatistics entityStats<span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">boolean</span> odd <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>entityIter.<span style="color: #006633;">hasNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			entity <span style="color: #339933;">=</span> entityIter.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			entityStats <span style="color: #339933;">=</span> entityStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>entity<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #339933;">%&gt;</span>
			<span style="color: #339933;">&lt;</span>tr <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;%=(odd?&quot;</span>odd<span style="color: #0000ff;">&quot;:&quot;</span>even<span style="color: #0000ff;">&quot;)%&gt;&quot;</span><span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entity<span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entityStats.<span style="color: #006633;">getLoadCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entityStats.<span style="color: #006633;">getFetchCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entityStats.<span style="color: #006633;">getInsertCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entityStats.<span style="color: #006633;">getUpdateCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entityStats.<span style="color: #006633;">getDeleteCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>entityStats.<span style="color: #006633;">getOptimisticFailureCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;%</span>
			odd <span style="color: #339933;">=</span> <span style="color: #339933;">!</span>odd<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;/</span>table<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>collectionStatistics.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>table width<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;100%&quot;</span><span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;&lt;</span>th colspan<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;6&quot;</span> <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg2&quot;</span><span style="color: #339933;">&gt;</span>Collection statistics<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Role<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Loads<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Fetches<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Updates<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Recreate<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Remove<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;%</span>
		Iterator<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> collectionIter <span style="color: #339933;">=</span> collectionStatistics.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">iterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">String</span> collection<span style="color: #339933;">;</span>
		CollectionStatistics collectionStats<span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">boolean</span> odd <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>collectionIter.<span style="color: #006633;">hasNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			collection <span style="color: #339933;">=</span> collectionIter.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			collectionStats <span style="color: #339933;">=</span> collectionStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>collection<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #339933;">%&gt;</span>
			<span style="color: #339933;">&lt;</span>tr <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;%=(odd?&quot;</span>odd<span style="color: #0000ff;">&quot;:&quot;</span>even<span style="color: #0000ff;">&quot;)%&gt;&quot;</span><span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>collection<span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>collectionStats.<span style="color: #006633;">getLoadCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>collectionStats.<span style="color: #006633;">getFetchCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>collectionStats.<span style="color: #006633;">getUpdateCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>collectionStats.<span style="color: #006633;">getRecreateCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>collectionStats.<span style="color: #006633;">getRemoveCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;%</span>
			odd <span style="color: #339933;">=</span> <span style="color: #339933;">!</span>odd<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;/</span>table<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>secondLevelCacheStatistics.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;</span>table width<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;100%&quot;</span><span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;&lt;</span>th colspan<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;7&quot;</span> <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg2&quot;</span><span style="color: #339933;">&gt;</span>2nd level cache statistics<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>tr<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Regionname<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Puts<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Hits<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Misses<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Elements in memory<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Size in memory<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>th <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c bd1 bg1&quot;</span><span style="color: #339933;">&gt;</span>Elements on disk<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;%</span>
		Iterator<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> cacheIter <span style="color: #339933;">=</span> secondLevelCacheStatistics.<span style="color: #006633;">keySet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">iterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">String</span> cache<span style="color: #339933;">;</span>
		SecondLevelCacheStatistics cacheStats<span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">boolean</span> odd <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>cacheIter.<span style="color: #006633;">hasNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			cache <span style="color: #339933;">=</span> cacheIter.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			cacheStats <span style="color: #339933;">=</span> secondLevelCacheStatistics.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>cache<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #339933;">%&gt;</span>
			<span style="color: #339933;">&lt;</span>tr <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;%=(odd?&quot;</span>odd<span style="color: #0000ff;">&quot;:&quot;</span>even<span style="color: #0000ff;">&quot;)%&gt;&quot;</span><span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cache<span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cacheStats.<span style="color: #006633;">getPutCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cacheStats.<span style="color: #006633;">getHitCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cacheStats.<span style="color: #006633;">getMissCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cacheStats.<span style="color: #006633;">getElementCountInMemory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cacheStats.<span style="color: #006633;">getSizeInMemory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
				<span style="color: #339933;">&lt;</span>td<span style="color: #339933;">&gt;&lt;%=</span>cacheStats.<span style="color: #006633;">getElementCountOnDisk</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;%</span>
			odd <span style="color: #339933;">=</span> <span style="color: #339933;">!</span>odd<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #339933;">%&gt;</span>
		<span style="color: #339933;">&lt;/</span>table<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">/&gt;</span>
	<span style="color: #339933;">&lt;%</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://narcanti.keyboardsamurais.de/hibernate-statistics-jsp.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
