style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Problemas con rollback y hql

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();

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

getTransaction()

Usa beginTransaction() y guarda la transacción para darle commit o rollback.

tx = sesion.beginTransaction();
//borrar datos
tx.commit(); // o rollback()
Imagen de ajesus

getTransaction()

Hola !
He aplicado lo que me indicas, pero me pide casterar a Transaction.
Pero cuando lo ejecuto me da un excepcion.

Te adjunto el metodo tal y como lo he dejado y la excepcion para ver si pueden indicarme algo mas.
Un Saludo y gracias
----------------------------------------------------
Exception in thread "main" java.lang.ClassCastException: org.hibernate.transaction.JDBCTransaction cannot be cast to javax.transaction.Transaction
at Paquete.Main.borrarClienteHql(Main.java:217)
at Paquete.Main.menu(Main.java:77)
at Paquete.Main.main(Main.java:38)
-----------------------------------------------------

private static void borrarClienteHql() {
try {
Session session = HibernateUtil.getSession();
Transaction tx = (Transaction) session.beginTransaction();
String hql = "delete from Cliente";
Query query = session.createQuery(hql);
int rowCount = query.executeUpdate();
System.out.println("Filas Afectadas: " + rowCount);

try {
tx.commit();
} catch (RollbackException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (HeuristicMixedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (HeuristicRollbackException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // o rollback()

session.close();
} catch (SecurityException e) {
// TODO Auto-generated catch block
_logger.info("Exception 1");
e.printStackTrace();
}

}
}

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">