Usando Hibernate 3.0: Delete ValueObject Where …

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.
A continuacion va un pequeño ejemplo de uso de DELETE con WHERE en lugar de por Id:


String ejbql = "DELETE "+ fooPersistentVOClass.getSimpleName() + " WHERE "+where;
manager.getTransaction().begin();
deletedEntities= manager.createQuery(ejbql).executeUpdate();
manager.getTransaction().commit();

Ojo que executeUpdate() no devuelve necesariamente el numero de columnas borradas en la operacion, devuelve el numero de entidades eliminadas.

Mas informacion en:
http://www.hibernate.org/hib_docs/entitymanager/reference/en/html/batch.html

Comentarios

  1. Por cierto, el LIMIT no existe, pero JPA nos da un mecanismo mucho mas limpio para limitar los resultados.
    En el framework-jpa nos basta con utilizar el método:
    findByWhereLimit(String where,int indiceInicial,int numResultados)

    y este básicamente se basa en:
    Query query = manager.createQuery(_query);
    query.setFirstResult(indiceInicial);
    query.setMaxResults(numResultados);

    Tenéis el código completo en:
    http://desarrollo.viavansi.com/sites/viavansi-jpa/xref/com/viavansi/framework/persistencia/jpa/Ejb3Dao.html

Comments are closed.