Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Bloqueio de nível de tabela na hibernação


"Selecionar ... para atualização" é suportado no Hibernate via LockMode.UPGRADE que você pode definir, por exemplo, um NamedQuery .

Mas usar o bloqueio de linha de tabela de aplicativo/manual tem várias desvantagens (especialmente quando uma conexão de banco de dados é quebrada no meio de uma transação) e seu procedimento de atualização pode ficar sem isso:
  • Iniciar transação.
  • update table set state='PENDING', server_id=1 where state='IN PROGRESS';
  • Confirmar transação
  • selecione na tabela onde state='PENDING' e server_id=1;
  • [registros de processo]

Cada servidor deve ter um número exclusivo para que isso funcione, mas será menos propenso a erros e você deixará o DBMS fazer o que deve ser bom:isolamento (consulte ÁCIDO ).