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

<channel>
	<title>Espacio de Dario Quintana &#187; Hibernate</title>
	<atom:link href="http://blog.darioquintana.com.ar/category/hibernate/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.darioquintana.com.ar</link>
	<description></description>
	<lastBuildDate>Tue, 21 Jun 2011 22:51:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>NHibernate Stadistics &#8211; Go Fabio Go</title>
		<link>http://blog.darioquintana.com.ar/2007/10/08/nhibernate-stadistics-go-fabio-go/</link>
		<comments>http://blog.darioquintana.com.ar/2007/10/08/nhibernate-stadistics-go-fabio-go/#comments</comments>
		<pubDate>Tue, 09 Oct 2007 00:03:50 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2007/10/08/nhibernate-stadistics-go-fabio-go/</guid>
		<description><![CDATA[<p>Fabio Maulo, figura importatísima en el NHibernate team,&#160;siempre estuvo contribuyendo con parches y features,&#160;y ahora&#160;está portando muchas features de Hibernate 3.2.5 GA -ya lo veiamos <a href="http://blog.darioquintana.com.ar/2007/10/08/nhibernate-eventlisteners/">aquí</a> y <a href="http://blog.darioquintana.com.ar/2007/10/08/nhibernate-statelesssession-sin-cach-de-primer-nivel/">aquí</a>. Y ahora está por va tras&#160;<a href="http://www.hibernate.org/hib_docs/v3/api/org/hibernate/stat/Statistics.html">Hibernate Statistics</a>&#160;que podemos verlo en acción en este <a href="http://www.javalobby.org/java/forums/t19807.html">post</a>. </p> <p>La mejor parte del post es cuando realiza [...]]]></description>
			<content:encoded><![CDATA[<p>Fabio Maulo, figura importatísima en el NHibernate team,&nbsp;siempre estuvo contribuyendo con parches y features,&nbsp;y ahora&nbsp;está portando muchas features de Hibernate 3.2.5 GA -ya lo veiamos <a href="http://blog.darioquintana.com.ar/2007/10/08/nhibernate-eventlisteners/">aquí</a> y <a href="http://blog.darioquintana.com.ar/2007/10/08/nhibernate-statelesssession-sin-cach-de-primer-nivel/">aquí</a>. Y ahora está por va tras&nbsp;<a href="http://www.hibernate.org/hib_docs/v3/api/org/hibernate/stat/Statistics.html">Hibernate Statistics</a>&nbsp;que podemos verlo en acción en este <a href="http://www.javalobby.org/java/forums/t19807.html">post</a>. </p>
<p>La mejor parte del post es cuando realiza el calculo del caché hit-ratio:&nbsp;</p>
<pre class="csharpcode"><span class="kwrd">double</span> queryCacheHitCount  = stats.getQueryCacheHitCount();
<span class="kwrd">double</span> queryCacheMissCount = stats.getQueryCacheMissCount();
<span class="kwrd">double</span> queryCacheHitRatio = queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount);</pre>
<p>Les gustó ?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2007/10/08/nhibernate-stadistics-go-fabio-go/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NHibernate EventListeners</title>
		<link>http://blog.darioquintana.com.ar/2007/10/08/nhibernate-eventlisteners/</link>
		<comments>http://blog.darioquintana.com.ar/2007/10/08/nhibernate-eventlisteners/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 23:16:10 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2007/10/08/nhibernate-eventlisteners/</guid>
		<description><![CDATA[<p><a href="http://darioquintana.com.ar/blogging/?p=9">English post</a></p> <p>En este <a href="http://blog.darioquintana.com.ar/2007/10/08/nhibernate-statelesssession-sin-cach-de-primer-nivel/">post</a> comentábamos sobre StatelessSession como nueva feature de NHibernate, ahora bien, otra de las features disponibles en el trunk de NHibernate (portada de Hibernate) son los EventListeners. Con ellos podemos interceptar acciones llevadas a cabo por NHibernate antes o después de que se realicen como por ejemplo un Save, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://darioquintana.com.ar/blogging/?p=9">English post</a></p>
<p>En este <a href="http://blog.darioquintana.com.ar/2007/10/08/nhibernate-statelesssession-sin-cach-de-primer-nivel/">post</a> comentábamos sobre StatelessSession como nueva feature de NHibernate, ahora bien, otra de las features disponibles en el trunk de NHibernate (portada de Hibernate) son los EventListeners. Con ellos podemos interceptar acciones llevadas a cabo por NHibernate antes o después de que se realicen como por ejemplo un Save, Update, Load, Flush entre otras.</p>
<p>En este ejemplo vamos a realizar acciones antes y después de que se ejecute el comando Save(object). </p>
<p>Definimos el EventListener:</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> MySaveEventListener : NHibernate.Event.Default.DefaultSaveOrUpdateEventListener
{
    <span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> CascadeBeforeSave(IEventSource source, IEntityPersister persister,
                                              <span class="kwrd">object</span> entity, <span class="kwrd">object</span> anything)
    {
        Console.WriteLine(<span class="str">"Before Save the entity "</span> + entity);
        <span class="kwrd">base</span>.CascadeBeforeSave(source,persister,entity,anything);
    }

    <span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> CascadeAfterSave(IEventSource source, IEntityPersister persister,
                                             <span class="kwrd">object</span> entity, <span class="kwrd">object</span> anything)
    {
        Console.WriteLine(<span class="str">"After Save the entity "</span> + entity);
        <span class="kwrd">base</span>.CascadeAfterSave(source,persister,entity,anything);
    }
}</pre>
<p>Y para configurarlo programaticamente con el SessionFactory hacemos:&nbsp;</p>
<pre class="csharpcode">Configuration cfg = <span class="kwrd">new</span> Configuration();

cfg.Configure(<span class="str">"hibernate.cfg.xml"</span>);

cfg.SetListener(ListenerType.Save, <span class="kwrd">new</span> MySaveEventListener());</pre>
<p>Ahora realizamos un Save:&nbsp;</p>
<pre class="csharpcode"><span class="kwrd">using</span> (ISessionFactory sf = cfg.BuildSessionFactory())
{
    <span class="kwrd">using</span> (ISession session = sf.OpenSession())
    {
        Foo f1 = <span class="kwrd">new</span> Foo();
        f1.Misc = <span class="str">"m1"</span>;
        f1.Name = <span class="str">"n1"</span>;

        session.Save(f1);

        session.Flush();
    }
}</pre>
<p>Y este es el resultado de la consola, incluyendo el SQL que NHibernate generó:&nbsp;</p>
<pre class="csharpcode">Before Save the entity Entity Foo:0:n1
NHibernate: INSERT INTO Foo (Name, Misc) VALUES (@p0, @p1); select SCOPE_IDENTIT
Y(); @p0 = 'n1', @p1 = 'm1'
After Save the entity Entity Foo:1:n1
</pre>
<p>Foo tiene un object id como Integer e Identity. Antes de guardarse la property Id tiene como valor 0, despues del Save tiene como valor 1 (debido a que es el primer objeto en la base). </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2007/10/08/nhibernate-eventlisteners/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>NHibernate StatelessSession: sin cach&#233; de primer nivel</title>
		<link>http://blog.darioquintana.com.ar/2007/10/08/nhibernate-statelesssession-sin-cach-de-primer-nivel/</link>
		<comments>http://blog.darioquintana.com.ar/2007/10/08/nhibernate-statelesssession-sin-cach-de-primer-nivel/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 17:46:21 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2007/10/08/nhibernate-statelesssession-sin-cach-de-primer-nivel/</guid>
		<description><![CDATA[<p>En la próxima release de NHibernate estará disponible esta feature portada desde Hibernate por Fabio Maulo, los que deseen usarla en este momento deben hacerlo desde el <a href="https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/">trunk</a>.</p> <p>Qué hace? IStatelessSession es la interfaz que debemos usar para conseguir sesiones de NHibernate que no posean caché de primer nivel. Debemos recordar que la caché [...]]]></description>
			<content:encoded><![CDATA[<p>En la próxima release de NHibernate estará disponible esta feature portada desde Hibernate por Fabio Maulo, los que deseen usarla en este momento deben hacerlo desde el <a href="https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/">trunk</a>.</p>
<p><strong><u>Qué hace?</u></strong> <strong>IStatelessSession</strong> es la interfaz que debemos usar para conseguir sesiones de NHibernate que no posean caché de primer nivel. Debemos recordar que la caché de primer nivel en ISession es obligatoria y siempre la usamos cuando trabajamos con NHibernate. Trabajar sin ella era imposible hasta ahora.</p>
<p><strong><u>Para que sirve?</u></strong> Especialmente hecho para realizar operaciones en masa contra la base de datos.</p>
<p>Miremos este código:&nbsp;</p>
<pre class="csharpcode">        <span class="kwrd">using</span> (ISessionFactory sf = cfg.BuildSessionFactory())
            {
                <span class="kwrd">using</span> (IStatelessSession session = sf.OpenStatelessSession())
                {
                    <span class="kwrd">using</span> (ITransaction tx = session.BeginTransaction())
                    {
                        Foo f = <span class="kwrd">new</span> Foo();

                        f.Id = 1;
                        f.Misc = <span class="str">"m1"</span>;
                        f.Name = <span class="str">"n1"</span>;

                        session.Insert(f);

                        f.Id = 2;

                        session.Insert(f);

                        tx.Commit();

                        Debug.Assert(session.CreateQuery(<span class="str">"from Foo"</span>)
                                                    .List().Count == 2);
                    }
                }
            }</pre>
<p>Como verán el objeto&nbsp;f&nbsp;fué creado 1 vez y mandado a persistir&nbsp;dos veces con el Id cambiado, primero con &#8217;1&#8242; y luego con &#8217;2&#8242;. En un escenario común con caché de primer nivel esto no funcionaría, ya que NHibernate &#8220;recordaría&#8221; al objeto f desde que fué guardado por primera vez. Y como&nbsp;resultado en la base habrán 2 objetos guardados.</p>
<p>Notese también que al guardar el objeto realizamos un Insert en vez de un Save. Las inferzaces ISession e IStatelessSession no se relacionan para nada.</p>
<p>Para que este ejemplo funcione con cache de primer nivel es obligatorio hacer que NHibernate se &#8220;olvide&#8221; del objeto que acabamos de guardar llamando al metodo Evit(object) -método no disponible en IStatelessSession como podrán intuir. Y se vería así:&nbsp;</p>
<pre class="csharpcode"><span class="kwrd">            using</span> (ISessionFactory sf = cfg.BuildSessionFactory())
            {
                <span class="kwrd">using</span> (ISession session = sf.OpenSession())
                {
                    <span class="kwrd">using</span> (ITransaction tx = session.BeginTransaction())
                    {
                        Foo f1 = <span class="kwrd">new</span> Foo();

                        f1.Id = 1;
                        f1.Misc = <span class="str">"m1"</span>;
                        f1.Name = <span class="str">"n1"</span>;

                        session.Save(f1);

                        <span class="rem">//Eliminamos el objeto de la cache</span>
                        session.Evict(f1); 

                        f1.Id = 2;

                        session.Save(f1);

                        tx.Commit();

                        Debug.Assert(session.
                             CreateQuery(<span class="str">"from Foo"</span>).List().Count == 2);

                    }
                }
            }</pre>
<p>Recursos: </p>
<ul>
<li><a href="http://www.hibernate.org/hib_docs/v3/api/org/hibernate/StatelessSession.html">API documentation of StatelessSession at Hibernate</a></li>
<li><a href="https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/nhibernate/src/NHibernate.Test/Stateless/">Testing: IStateless fixture at NHibernate</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2007/10/08/nhibernate-statelesssession-sin-cach-de-primer-nivel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

