Java - Problema con Rollback y Hibernate Hql

   
Vista:

Problema con Rollback y Hibernate Hql

Publicado por Ajesus (1 intervención) el 17/10/2011 10:50:39
Hola para tod@s !

Estoy utilizando Hql para realizar un borrado masivo sobre una tabla, el problema es que
intento implementar control de transaciones.

Lanzo la sencia y funciona perfectamente me borra en este caso toda la tabla de cliente.
El problema es cuando despues de ejecutar la sentencia intento realizar un rollback, no consigo
que la sentencia no sea aplicada sobre la base de datos, pero no me hace ni caso, es decir, le da
igual que realice un commit o rollback, pues borra toda la tabla. Uhhhh ???

Por lo que he leido por ahi, me da la sensacion que al utilizar hql, lanza directamente la
operacion sobre la base de datos y no tenemos la opcion de realizar rollback pues ya estan los registros
borrados de la base de datos.

Si esta deducion es correcta como puedo solucionarlo, necesito realizar operaciones masivas sobre la
base de datos, no solamente añadir, borrar o modificar un solo registro y al mismo tiempo tener un control
transacional.

Adjunto mi codigo, para que podais enter lo que estoy intentado explicar.

Un saludo y hasta luego
session.getTransaction().begin();
_logger.info("Borrar Por Hql");

String hql = "delete from Cliente";
Query query = session.createQuery(hql);
// query.setString("name","Product 1");
int rowCount = query.executeUpdate();
System.out.println("Filas Afectadas: " + rowCount);

// session.getTransaction().commit();
session.getTransaction().rollback();
session.close();
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con Rollback y Hibernate Hql

Publicado por reiki (60 intervenciones) el 19/10/2011 23:22:30
hola q tal, el detalle es que la configuracion por default de hibernate para las transacciones es realizar un autocomit, por eso cuando executas la sentencia despues no importa si haces o no el rollback, puesto que ya hiso la modificacion en la bd, entonces solo tienes que poner el autocomit como falso,

como lo haces, pues, si estas utilizando la configuracion por default que te genera el ide, q casi siempre es

<hibernate-configuration>
<session-factory>
.... toda la configuracion
</session-factory>
</hibernate-configuration>

solo agrega la siguiente linea a es bonche:

<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.autocommit">false</property>
</session-factory>
</hibernate-configuration>


*********** O SI USAS SPRING************ TENDRAS ALGO PARECIDO A ESTO

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.autocommit">false</prop>
</props>
</property>
</bean>


DE ESTE MODO TU CONTROLAS LAS TRANSACCIONES

SALUDOS...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar