2010-02-25 19 views
5

Tengo una entidad de hibernación llamada Ejecución. Se crea al principio de mi proceso y se actualiza al final, indicando cómo ha finalizado.Actualización de la entidad JPA-Hibernate sin seleccionarla de la base de datos

Me gustaría actualizar una sola propiedad de esta entidad, sin causar una selección en mi base de datos.

Execution execution = entityManager.getReference(Execution.class, executionId); execution.setStatus(Status.FINISHED); // -> Llamar a este método dispara un SELECCIONAR en mi base de datos. No quería que sucediera, solo quiero actualizar mi entidad.

Esto no es específico de este método, cualquier otro método llamado resultados en una cláusula SELECT. De hecho, la selección parece suceder incluso antes de que se llame a mi método. Mi impresión es que los proxies hibernate ponen algún código dentro de mi contructor no-args de clase para activar un select cada vez que se llama a un método.

¿Es posible actualizar las entidades JPA/Hibernate sin activar una instrucción SELECT en mi base de datos?

Respuesta

1

Así es como funciona Hibernate. Su objeto proxy carga el objeto real desde el DB cuando se accede a cualquier propiedad que no sea de identificación.

Intente guardar/cargar el objeto al principio del proceso (para ejecutar ese SELECT) y asegúrese de que la sesión no se vacía automáticamente cuando se toca un objeto (creo que el comportamiento predeterminado no es auto-flush , pero vale la pena comprobarlo).

O también podría intentar separar su objeto de la sesión de Hibernate durante el proceso.

+1

Voy a aceptar esta respuesta como la correcta. Encontré una solución más fácil para lo que quería, utilizando JPA-QL Bulk Update/Insert http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/batch.html#batch-direct – user266391

+0

@ user266391 No estoy familiarizado con JPA así que gracias por el enlace :-) –

Cuestiones relacionadas