Primavera de datos: Cómo bloquear una fila en una transacción y hacer otras transacciones esperan hasta que se libera?

Sasha Shpota:

Tengo un @Transactionalmétodo en el que solicito un registro utilizando findById()desde un repositorio de datos de primavera.

Ahora quiero bloquear este objeto de una manera que otros @Transactionalmétodos si se ejecuta en paralelo esperarán hasta que se libere el bloqueo.

Lo que he intentado: Fui a través de la documentación de @Lock y LockModeType pero todavía no puedo averiguar si cubre mi caso.

Otra opción sería select for updateen un nivel de base de datos, pero no estoy seguro de que es la mejor opción.

Q: ¿Cómo bloquear un objeto de entidad (fila db) en una transacción de datos de primavera y hacen otras transacciones esperan?

Alexandar Petrov:

Lo que se quiere es llamado Bloqueo pesimista . Datos de primavera a través de soportes de especificación JPA que. Hay dos modos de bloqueo pesimista disponibles:

Creo que se están mezclando con el aislamiento de transacción de bloqueo. A través de @Transactionalla anotación puede especificar el aislamiento que se aplica a la conexión, mientras que a través psirng-datos @Locking puede definir el modo de bloqueo. El modo de bloqueo no está relacionado con el aislamiento de la transacción especificado en @Transactional. Effectivly si el aislamiento es SERIALIZEABLE usted no necesita de bloqueo a través de la APP o de primavera-datos, debido a que la base de datos se hará cargo de ella. Las cerraduras serán DB controlados en este caso.

Cuando se define el bloqueo del control está en sus manos. He aquí una descripción de los tipos de bloqueo pesimistas.

PESSIMISTIC_WRITE - todas las transacciones que incluyen la lectura únicos serán bloqueados hasta que la transacción que tiene el bloqueo es completo. Lecturas sucias no están permitidos.

PESSIMISTIC_READ - cuando se tiene este modo, las transacciones concurrentes pueden leer los datos de la fila bloqueada. Todas las actualizaciones necesitan obtener cerradura PESSIMISTIC_WRITE.

Además de esto se puede especificar un tiempo de espera para la realización de transacciones de bloqueo.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=234545&siteId=1
Recomendado
Clasificación