2010-03-02 11 views
5

Estoy usando la implementación de EclipseLink de JPA 2.0 que permite el bloqueo pesimista. Sé cómo bloquear una entidad, pero ¿cómo puedo liberar el bloqueo? Al principio pensé que todo esto se había solucionado dentro de una transacción (en otras palabras, la entidad está bloqueada hasta que usted realice la transacción), pero ese no parece ser el caso.¿Cómo liberar una fila bloqueada usando JPA?

que intentaron una rápida búsqueda en Google (Parece que esto debería ser bastante obvio), pero no he encontrado nada ...

Respuesta

9

Después de conseguir un poco de sueño ... y hacer algunas pruebas más en la mañana, Creo que he resuelto mi problema. Entonces, la cerradura se ocupa de una transacción. Sin embargo, cuando estaba probando mi código, pude recuperar una fila bloqueada utilizando el método EntityManager.find (Clase, clave) (no se especificó estrategia de bloqueo). Pensé erróneamente que al poner un candado en una fila, no se podía leer la fila. Período. Sin embargo, vuelvo a leer las definiciones de la APP y PESSIMISTIC_READ PESSIMISTIC_WRITE y se dio cuenta de mi problema:

PESSIMISTIC_READ - La Entidad está bloqueado en la base de datos, evita que cualquier otra transacción de adquirir un bloqueo PESSIMISTIC_WRITE. PESSIMISTIC_WRITE - La entidad está bloqueada en la base de datos, impide cualquier otra transacción desde adquiriendo un bloqueo PESSIMISTIC_READ o PESSIMISTIC_WRITE.

El bloqueo no evita necesariamente todas las lecturas, solo evita que otra transacción coloque un bloqueo de LECTURA o ESCRITURA en la fila.