envers ejemplo data auditable java spring hibernate jboss hibernate-envers

java - ejemplo - spring auditable entity



Hibernate Envers: no escribe registros de auditoría para createQuery(...).executeUpdate(), solo.persist() y.merge() (3)

Tengo 3 maneras en que las cosas se escriben en el DB

public void create(T object) { entityManager.persist(object); } public void update(T object) { object = entityManager.merge(object); } public int updateStatus(String id, String status) { final int changes = entityManager.createQuery("update item set state = :newState," + " last_modified = current_timestamp" + " where id = : id ") .setParameter("newState", status) .setParameter("id", id) .executeUpdate(); return changes; }

El problema que tengo es que los Hibernate Envers realmente escriban los registros de auditoría en la siguiente tabla x_aud y revinfo DB tables. Solo funciona con éxito para ''.persist ()'' o ''.merge ()''. No puedo hacer que funcione para ''createQuery (...) .executeUpdate () ''

¿Me estoy perdiendo algo o simplemente no funciona para esto? El problema es que gran parte de mi código se ha escrito utilizando .executeUpdate y no se fusiona, así que realmente necesito que esto funcione con el código existente.

¿Alguien puede ayudar, por favor?


Parece que Avinash T. tiene razón: si desea crear una consulta SQL nativa, use el createNativeQuery(String sqlString) de EntityManager . Usar createQuery(String ejbqlString) solo es posible si está utilizando EJB QL. Espero que ayude


Prueba esto -

public int updateStatus(String id, String status) { final int changes = entityManager.createQuery("Update Item set state = :newState," + " lastModified = CURRENT_TIMESTAMP" + " where id = : id ") .setParameter("newState", status) .setParameter("id", id) .executeUpdate(); return changes; }

El siguiente enlace lo ayudará a aprender más sobre JPQL:

http://docs.oracle.com/javaee/6/tutorial/doc/bnbtg.html


No, Envers no funcionará si está utilizando executeUpdate. Esto se debe a que la actualización no pasa por el mecanismo de eventos de Hibernate, por lo que Envers no tiene posibilidades de interceptar el cambio y escribir la auditoría.