<?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>Xnoccio.com &#187; jpa</title>
	<atom:link href="http://www.xnoccio.com/es/tag/jpa/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xnoccio.com</link>
	<description>Blog de viavansi</description>
	<lastBuildDate>Fri, 27 Jan 2012 19:59:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tipos de estrategias de generación de identificadores con JPA</title>
		<link>http://www.xnoccio.com/es/1538-table-identity-sequence-tipos-de-estrategias-de-generacion-de-identificadores-con-jpa/</link>
		<comments>http://www.xnoccio.com/es/1538-table-identity-sequence-tipos-de-estrategias-de-generacion-de-identificadores-con-jpa/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 17:13:54 +0000</pubDate>
		<dc:creator>Felix G. Borrego</dc:creator>
				<category><![CDATA[xnoccio]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[jpa]]></category>

		<guid isPermaLink="false">http://www.xnoccio.com/?p=1538</guid>
		<description><![CDATA[Los identificadores para entidades JPA (@Id mapeados como Primary Keys) pueden ser identificadores naturales con algún tipo de significado para la aplicación (NIF, email, etc&#8230;) o generados por el sistema y automáticamente asignados al objeto (normalmente utilizando la anotación @GeneratedValue).
Hasta aquí nada nuevo, pero ahora vamos a repasar las diferentes estratégias disponibles:
Secuencia basada en TABLA
En [...]]]></description>
			<content:encoded><![CDATA[<p>Los identificadores para entidades JPA (@Id mapeados como Primary Keys) pueden ser identificadores naturales con algún tipo de significado para la aplicación (NIF, email, etc&#8230;) o generados por el sistema y automáticamente asignados al objeto (normalmente utilizando la anotación @GeneratedValue).<br />
Hasta aquí nada nuevo, pero ahora vamos a repasar las diferentes estratégias disponibles:</p>
<p><strong>Secuencia basada en TABLA</strong><br />
En esta estrategia hacemos uso de una tabla auxiliar con la que gestionar los identificadores secuenciales. En la tabla aparecerá una nueva fila por cada objeto de secuencia y cada ver que se necesite un nuevo identificador se incrementará la secuenca almacenada en la tabla y asignará dicho identificador.<br />
Este mecanismo es uno de los más portables y es recomendable en casos de que deseemos maximizar la portabilidad de nuestra aplicación.</p>
<p><code><br />
@Id<br />
@GeneratedValue(strategy = GenerationType.TABLE)<br />
public Long id;<br />
</code></p>
<p>En cuanto a rendimiento, esta solución ofrece un buen rendimiento ya que permite reservar grupos de identificadores de forma que se minimicen los accesos a dicha tabla y el comportamiento es muy bueno ya que permite conocer los identificadores sin necesidad de realizar el commit.<br />
El único problema que plantea es que en determinadas ocasiones puede causar bloqueos. En concreto en las situaciones en las que el propio acceso a la tabla de secuencias se realice de forma transaccional y podamos tener otros procesos a su vez consumiendo dicha tabla. Por este motivo esta solución no es recomendable a no ser que se utilicen conexiones no-JTA para el acceso a la tabla de secuencias.</p>
<p><strong>Identit</strong></p>
<p>Esta estratégia de generación hace uso de un tipo de columna especial IDENTITY que está disponile en la mayoría de las bases de datos (desgraciadamente no está disponible en ORACLE).</p>
<p>Respecto a la portabilidad, este método de generación es portable ya a pesar de no estar disponible en Oracle puede ser facilmente simulado mediante trigers. Ofreciendo de una forma muy sencilla su potabilidad en el resto de bases de datos.<br />
A pesar de ser un mecanismo muy utilizado, el principal problema de este mecanismo es su que no resulta nada eficiente, ya que dado que es la base de datos la que se encarga de autogenerar el valor, necesitaremos hacer un segundo acceso (en lectura) para conocer el identificador asignado. Al no poder realizar pre reserva de identificadores, este método es muy ineficiente y en general no recomendable.</p>
<p><strong>Objeto de Secuencia</strong><br />
En este caso se hace uso de un tipo de recurso específico de las base de datos dedicado a la generación de secuencias. El principal problema que plantéa este método es que no está disponible en todas las bases de datos por lo que el código puede puede resultar no portable.<br />
En cuento a rendimiento, ofrece una solución optima ya que permite definir bloques de identificadores reservados, de forma que se minimicen los accesos a la secuencia.</p>
<p><code><br />
@Id<br />
@GeneratedValue(strategy = GenerationType.SEQUENCE)<br />
public Long id;<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xnoccio.com/es/1538-table-identity-sequence-tipos-de-estrategias-de-generacion-de-identificadores-con-jpa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Por fin un estándar con el que entretejer nuestras aplicaciones.</title>
		<link>http://www.xnoccio.com/es/530-webbeans-java-context-and-dependenty-injection-jsr-299/</link>
		<comments>http://www.xnoccio.com/es/530-webbeans-java-context-and-dependenty-injection-jsr-299/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 23:45:22 +0000</pubDate>
		<dc:creator>Felix G. Borrego</dc:creator>
				<category><![CDATA[javahispano]]></category>
		<category><![CDATA[viavansi]]></category>
		<category><![CDATA[xnoccio]]></category>
		<category><![CDATA[análisis]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[seam]]></category>
		<category><![CDATA[wicket]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://xnoccio.com/530-webbeans-java-context-and-dependenty-injection-jsr-299/</guid>
		<description><![CDATA[Recientemente se ha liberado la primera versión estable de Weld, la implementación de referencia de Web Beans (Java Context and Dependenty Injection - JSR 299). Y aunque puede parecer una liberación cualquiera, en este caso estamos ante un evento realmente importante para el mundillo Java.
¿Por qué es importante esta liberación?

Por fin tenemos un estándar Java [...]]]></description>
			<content:encoded><![CDATA[<p>Recientemente se ha liberado la primera versión estable de Weld, la implementación de referencia de Web Beans (<em><strong>Java Context and Dependenty Injection </strong>- </em>JSR 299). Y aunque puede parecer una liberación cualquiera, en este caso estamos ante un evento realmente importante para el mundillo Java.</p>
<p><strong>¿Por qué es importante esta liberación?</strong></p>
<ul>
<li>Por fin tenemos un <strong>estándar Java para la inyección</strong>, publicación, localización y búsqueda de componentes.</li>
<li>Promete una mejor <strong>orquestación</strong> entre componentes JEE, evitando los típicos problemas de interoperabilidad entre Beans Spring, componentes Seam,  Wicket,  JSF, EL, etc..)</li>
<li>Un <strong>remplazo estándar a las diferentes soluciones de inyección e IoC </strong>como Spring IoC, el prometedor Google Guice o el muy utilizado por nosotros Jboss Seam annotations.</li>
<li><a href="http://xnoccio.com/187-el-falso-santo-grial-de-j2ee-y-la-nueva-esperanza-jee/" title="El infierno XML">Fin del infierno XML</a>, definiendo un mecanismo estándar independiente de ficheros de definición XML, que junto con JSF 2.0, Servlet 3.0, JPA, Jax-ws, etc&#8230; simplifican el desarrollo JEE.</li>
</ul>
<p><strong>¿Consecuencias para la industria a medio plazo?</strong></p>
<ul>
<li>Es demasiado pronto para saberlo, pero&#8230;<br />
<strong>¿Quizás el fin de la guerra de frameworks se inyección?</strong>&#8230;. (Google Guice vs <a href="http://www.xnoccio.com/300-spring-vs-seam-la-guerra-ha-empezado/" title="Spring vs Seam">Spring vs Jboss Seam</a>).  Consiguiendo un efecto similar al que consiguió JPA/JDO estandarizando el acceso a datos.</li>
<li>Por fin una especificación JEE con la que construir aplicaciones complejas de forma sencilla.</li>
<li>En un momento en el que muchas organizaciones están intentando estandarizar sus desarrollos, llegando incluso a restringir o imponer las tecnologías utilizadas, la preselección de implementaciones como  Spring IoC o Seam carecerá de sentido. Siendo mucho más coherente <strong>la recomendación de estándares</strong> en lugar de restringir la evolución natural de la tecnología y la sana competición entre sus diferentes implementaciones.</li>
</ul>
<p><strong>¿Consecuencia para nosotros?</strong></p>
<ul>
<li>Ninguna&#8230;. Gracias a nuestra apuesta por Jboss Seam (desde hace ya unos años), esta especificación se encontraba ya en nuestra hoja de ruta antes incluso de que fuese un Draft, por lo que para nosotros será suficiente con una mínima adaptación al estándar.</li>
<li>La implementación es estable, la especificación muy bien pensada,  y en las pruebas que hemos realizado con la beta, ha demostrado que consigue simplificar los desarrollos y hacer más comprensible el <strong>&#8220;oscuro arte de la inyección de componentes&#8221;</strong>.</li>
<li>En breve empezaremos a usarla en algún proyecto piloto (que pueda asumir el riesgo de I+D asociado), analizaremos en detalle los posibles problemas que puedan surgir, y <strong>si todo se comporta como promete</strong> a mediados de 2010 empezaremos a usar la nueva especificación en nuestros proyectos Java.</li>
</ul>
<p><strong>¿Defectos?</strong></p>
<ul>
<li>Llega demasiado tarde. Otros frameworks llevan, aunque de una forma mucho menos limpia,  ofreciendo algo similar desde hace ya mucho tiempo.</li>
<li>Todavía no conocemos sus defectos. Y eso es un gran problema ya que hasta que no conozcamos sus problemáticas asociadas no será seguro su uso en proyectos de envergadura.</li>
<li>Esperemos que en la huida del <a href="http://xnoccio.com/187-el-falso-santo-grial-de-j2ee-y-la-nueva-esperanza-jee/">infierno de los ficheros de configuración XML</a>, no nos metamos en  las <strong>tinieblas del uso de inyección e IoC para todo</strong>. Ya que una aplicación con una gran cantidad de componentes, comportamientos o atributos que dependen de la inyección hace muy complicada la comprensión de su funcionamiento.</li>
</ul>
<p>En definitiva, todo indica que estamos antes una de las piezas clave del próximo JEE 6.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xnoccio.com/es/530-webbeans-java-context-and-dependenty-injection-jsr-299/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Implementando un flujo de firmas en nuestro workflow</title>
		<link>http://www.xnoccio.com/es/381-implementando-un-flujo-de-firmas-en-nuestro-workflow/</link>
		<comments>http://www.xnoccio.com/es/381-implementando-un-flujo-de-firmas-en-nuestro-workflow/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 23:51:59 +0000</pubDate>
		<dc:creator>Benito Galán</dc:creator>
				<category><![CDATA[javahispano]]></category>
		<category><![CDATA[viafirma]]></category>
		<category><![CDATA[firma digital]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[seam]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://xnoccio.com/381-implementando-un-flujo-de-firmas-en-nuestro-workflow/</guid>
		<description><![CDATA[A continuación vamos a explicar cómo aprovechar las bondades de tres componentes habituales en nuestros desarrollos para implementar un sencillo flujo de firma de formularios.
Los jugadores son:

Jbpm 3.2 como motor de workflow.
Formula 2 como motor de formularios.
Viafirma 1.3.5 como motor de firma digital.

La aplicación que los implementa está desarrollada con Seam + JSF + JPA.
La [...]]]></description>
			<content:encoded><![CDATA[<p>A continuación vamos a explicar cómo aprovechar las bondades de tres componentes habituales en nuestros desarrollos para implementar un sencillo flujo de firma de formularios.</p>
<p>Los jugadores son:</p>
<ol>
<li>Jbpm 3.2 como motor de workflow.</li>
<li>Formula 2 como motor de formularios.</li>
<li>Viafirma 1.3.5 como motor de firma digital.</li>
</ol>
<p>La aplicación que los implementa está desarrollada con Seam + JSF + JPA.</p>
<h3>La Descripción</h3>
<p>Básicamente el requisito era el siguiente: un formulario completado por un usuario entraba en un flujo de transiciones en el que distintos departamentos y/o personas tenían que ir aprobándolo con su firma digital.</p>
<p>La solución tradicional con la que contábamos se basaba en recuperar los datos del primer formulario, y en la transición adecuada los mostrábamos para que el firmante pudiera comprobar los datos (tareas).</p>
<p>Esto implicaba un esfuerzo en la redendirización nuevamente de los datos facilitados por el usuario, por lo que decidimos aprovechar las características de los componentes usados para simplicarlo todo.</p>
<h3>Solución</h3>
<p>Formula2 permite la identificación de los campos creados en el formulario. De esta manera nuestra solución consisitirá en identificar un mismo <strong>nombre de campo</strong> dentro de un mismo <strong>ProcessId</strong>.</p>
<p>Una vez asegurado en nuestro proceso esta identificación de campos, ahora toca el turno de Formula2; duplicaremos el formulario original, y modificaremos todos sus campos al tipo ReadOnly, de manera que el firmante no pueda modificar los datos mostrados en el formulario inicial.</p>
<p><a href="http://www.xnoccio.com/wp-content/uploads/2008/11/copyform1.gif" title="Copiar un formulario en Formula2"><br />
<img src="http://www.xnoccio.com/wp-content/uploads/2008/11/copyform1.gif" alt="Copiar un formulario en Formula2" border="0" width="450" height="76" /></a></p>
<p>Opcionalmente, a esta copia del formulario se le podrán añadir campos adicionales, como por ejemplo, un campo de observaciones o bien otros campos para informar valores necesarios en la siguiente transición.</p>
<p>Esta tarea de modificar cada campo de un formulario podría resultar algo engorrosa, pero solo habrá que hacerlo una vez, ya que la primera copia con todos sus campos &#8220;ReadOnly&#8221; nos serviría  de base para las sucesivas copias que necesitemos, y para estas copias ya no será necesario modificar la propiedad de sus campos.</p>
<p><a href="http://www.xnoccio.com/wp-content/uploads/2008/11/variableprop1.gif" title="Modificar propiedad campo"><img src="http://www.xnoccio.com/wp-content/uploads/2008/11/variableprop1.gif" alt="Modificar propiedad campo" border="0" width="450" height="258" /></a></p>
<h3>Resultado</h3>
<p>A medida que el diseño del flujo (process-definition) va ejecutando las tareas e invocando los distintos formularios, los actores propietarios de dichas tareas van firmando con su certificado digital los formularios.</p>
<p>El proceso de firma es delegado a nuestro al motor de firma <a href="http://www.viafirma.com" title="ver info de Viafirma"><strong>VIAFIRMA</strong></a>. Cuando éste completa la transacción de firma, devuelve todos los datos necesarios a nuestro sistema. En este caso, <strong>Jbpm</strong> interpreta estos datos de firma como variables del proceso, añadiéndolos como un dato más de la transición.</p>
<p>Como valor agregado, estos datos de firma y los contenidos en el formulario son indexados mediante <strong>Lucene (implementando openSearch)</strong>, y de esta forma ofrecemos al usuario la posibilidad de buscar su proceso por el código de firma que se le informó.</p>
<p><a href="http://www.xnoccio.com/wp-content/uploads/2008/11/proccesshistory1.gif" title="Histórico del Proceso"><img src="http://www.xnoccio.com/wp-content/uploads/2008/11/proccesshistory1.gif" alt="Histórico del Proceso" border="0" width="450" height="161" /></a></p>
<p>Tras el proceso de firma, se le muestra al usuario una pantalla de recibo, donde se le accede a toda la información del proceso con las distintas opciones:</p>
<ul>
<li>Descarga del formulario que fue firmado.</li>
<li>Descarga del comprobante de firma, con los datos del firmante y de la transacción (fecha, hora y certificado usado).</li>
<li>Id. de las tarea y proceso.</li>
<li>Link permanente a su proceso.</li>
<li>Todo ello apoyado con imágenes bidimensionales como el <acronym title="Quick Response Code">Qr-Code</acronym> con el resumen de la firma y el BarCode con el código de la firma.</li>
</ul>
<p><a href="http://www.xnoccio.com/wp-content/uploads/2008/11/justificante-demo1.gif" title="Justificante de Firma"><img src="http://www.xnoccio.com/wp-content/uploads/2008/11/justificante-demo1.gif" alt="Justificante de Firma" border="0" /></a></p>
<h3>Posibles Conflictos</h3>
<p>Seguro que a alguno ya se le ha pasado por la cabeza un posible conflicto:</p>
<p><em>¿Qué ocurre si para un mismo ProcessId se ven involucrados 2 formularios que no son copias el uno del otro, pero el identificador que le pusimos al campo es el mismo, por ejemplo ID_PROFESOR?</em></p>
<ul>
<li>si el segundo formulario NO es una copia del primero, pero tiene un campo con el mismo Id., efectivamente nuestro proceso hará que este segundo formulario se renderice con el valor introducido para ese campo en el primer formulario. Pero, al no tratarse de una copia, el campo no será del tipo ReadOnly (o no debiera), por lo que el valor podría ser modificado por el usuario.</li>
<li>La solución a este tipo de conflictos en nuestro caso: anteponer un identificador del formulario a modo de prefijo en el identificador del campo. Por ejemplo: FRM_9_ID_PROFESOR.</li>
</ul>
<h3>Resumen</h3>
<p>Gracias a la funcionalidad de Formula2 para identificar los campos y duplicar formularios conseguiremos una sencilla implementación de un ESCRITORIO DE FIRMA.</p>
<ul title="ventajas">
<li>Nos ahorramos construir N formularios.</li>
<li>Nos ahorramos la lógica para recuperar y renderizar los datos asociados al formulario original y que necesitamos ir mostrando a cada firmante.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.xnoccio.com/es/381-implementando-un-flujo-de-firmas-en-nuestro-workflow/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Tips: Hibernate y los prefijos de tablas</title>
		<link>http://www.xnoccio.com/es/130-tips-hibernate-y-los-prefijos-de-tablas/</link>
		<comments>http://www.xnoccio.com/es/130-tips-hibernate-y-los-prefijos-de-tablas/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 15:13:14 +0000</pubDate>
		<dc:creator>Felix G. Borrego</dc:creator>
				<category><![CDATA[xnoccio]]></category>
		<category><![CDATA[ejb]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jpa]]></category>

		<guid isPermaLink="false">http://xnoccio.com/130-tips-hibernate-y-los-prefijos-de-tablas/</guid>
		<description><![CDATA[Un problema muy común al que nos llevamos tiempo enfrentando es el uso de prefijos de tablas en los entornos de producción. Si por ejemplo nos asignan el prefijo &#8220;SB_&#8221;, la tabla que durante el desarrollo se llamaba &#8220;PERSONA&#8221; ahora pasa a llamarse SB_PERONA.
Al utilizar JPA/EJB3.0 este problema queda mitigado al utilizar la anotación @TABLE, [...]]]></description>
			<content:encoded><![CDATA[<p>Un problema muy común al que nos llevamos tiempo enfrentando es el uso de prefijos de tablas en los entornos de producción. Si por ejemplo nos asignan el prefijo &#8220;SB_&#8221;, la tabla que durante el desarrollo se llamaba &#8220;PERSONA&#8221; ahora pasa a llamarse SB_PERONA.</p>
<p>Al utilizar JPA/EJB3.0 este problema queda mitigado al utilizar la anotación @TABLE, pero nos sigue obligando a modificar todas las entidades de la aplicación para adaptarlas al nuevo prefijo.</p>
<p>Para solucionar esto, la especificación JPA contempla la posibilidad de establecer estrategias para la generación del nombre definitivo. Utilizando la implementación de Hibernate-entitymanager es tan sencillo como implementar nuestra propia clase NameStrategy e indicarla en persistece.xml.</p>
<p>1.- Indicamos a Hibernate la implementación que deseamos utilizar:</p>
<pre><code>&lt;--Configuración para el soporte de prefijos en Hibernate. Estrategia para generación de nombres de tablas asociadas a anotaciones Table JPA3.0.--&gt;
&lt;property name="hibernate.ejb.naming_strategy" value="com.viavansi.framework.persistencia.jpa.NamingStrategy"&gt;&lt;/property&gt;
</code></pre>
<p>2.-Implementación, lo mas sencillo es sobreescribir  el método String tableName(String tableName)  de  <strong>DefaultComponentSafeNamingStrategy</strong> que implementa la gestión de anotaciones JPA en Hibernate.<br />
<a href="http://www.xnoccio.com/wp-content/uploads/2007/06/namingstrategyjava1.txt" onclick="return false;" title="Direct link to file"></a></p>
<p><a href="http://www.xnoccio.com/wp-content/uploads/2007/06/namingstrategyjava1.txt" title="It’s a replace of prefix tables on Hibernate">It’s a replace of prefix tables on Hibernate</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xnoccio.com/es/130-tips-hibernate-y-los-prefijos-de-tablas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Usando Hibernate 3.0: Delete ValueObject Where …</title>
		<link>http://www.xnoccio.com/es/57-usando-hibernate-30-delete-valueobject-where/</link>
		<comments>http://www.xnoccio.com/es/57-usando-hibernate-30-delete-valueobject-where/#comments</comments>
		<pubDate>Thu, 22 Feb 2007 18:07:07 +0000</pubDate>
		<dc:creator>dbejar</dc:creator>
				<category><![CDATA[xnoccio]]></category>
		<category><![CDATA[ejbql]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jpa]]></category>

		<guid isPermaLink="false">http://xnoccio.com/?p=57</guid>
		<description><![CDATA[No todas las implementaciones de persistencia JPA soportan usando EJBQL, el uso UPDATE y DELETE con clausula WHERE, pero Hibernate si es una de ellas. Si bien, recientemente nos llevamos una desagradable sorpresa al comprobar que Hibernate no soportaba la clausula LIMIT, no podemos si no congratularnos de que sinembargo si que dispongamos de esta otra [...]]]></description>
			<content:encoded><![CDATA[<p>No todas las implementaciones de persistencia JPA soportan usando EJBQL, el uso UPDATE y DELETE con clausula WHERE, pero Hibernate si es una de ellas. Si bien, recientemente nos llevamos una desagradable sorpresa al comprobar que Hibernate no soportaba la clausula LIMIT, no podemos si no congratularnos de que sinembargo si que dispongamos de esta otra funcionalidad implementada.<br />
A continuacion va un pequeño ejemplo de uso de DELETE con WHERE en lugar de por Id:</p>
<pre><code>
String ejbql = "DELETE "+ fooPersistentVOClass.getSimpleName() + " WHERE "+where;
manager.getTransaction().begin();
deletedEntities= manager.createQuery(ejbql).executeUpdate();
manager.getTransaction().commit();
</code></pre>
<p>Ojo que <em>executeUpdate()</em> no devuelve necesariamente el numero de columnas borradas en la operacion, devuelve el numero de entidades eliminadas.</p>
<p>Mas informacion en:</p>
<p>http://www.hibernate.org/hib_docs/entitymanager/reference/en/html/batch.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xnoccio.com/es/57-usando-hibernate-30-delete-valueobject-where/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

