sql >> Base de Datos >  >> RDS >> Mysql

Bloqueo de nivel de tabla en Hibernate

"Seleccionar... para actualizar" es compatible con Hibernate a través de Modo de bloqueo.UPGRADE que puede configurar, por ejemplo, un NamedQuery .

Pero el uso de bloqueo de fila de tabla manual/aplicación tiene varios inconvenientes (especialmente cuando una conexión de base de datos se interrumpe a la mitad de una transacción) y su procedimiento de actualización puede prescindir de él:

  • Iniciar transacción.
  • actualizar conjunto de tablas state='PENDING', server_id=1 where state='IN PROGRESS';
  • Confirmar transacción
  • seleccione de la tabla donde state='PENDING' and server_id=1;
  • [registros de proceso]

Cada servidor debe tener un número único para que esto funcione, pero será menos propenso a errores y dejará que el DBMS haga lo que se supone que debe hacer:aislamiento (consulte ACID ).