Como o Hibernate está decidindo a ordem de atualização / inserção / exclusão

Vamos primeiro esquecer o Hibernate. Suponha que eu tenha duas tabelas, A e B. Duas transações estão atualizando os mesmos registros nessas duas tabelas, mas txn 1 atualiza B e, em seguida, A, enquanto txn 2 atualiza A e B. Esse é um exemplo típico de deadlock. A maneira mais comum de evitar isso é pré-definir a ordem de aquisição de recursos. Por exemplo, devemos atualizar a tabela A e depois B.

Volte para o Hibernate. Quando estamos atualizando muitas entidades em uma sessão, uma vez que eu estou liberando a sessão, mudanças de diferentes entidades irão gerar instruções insert / update / delete correspondentes para o DB. O Hibernate possui algum algoritmo para decidir a ordem de atualização entre as entidades? Se não, qual é a maneira que o Hibernate usado para impedir a situação de impasse descrita no primeiro parágrafo?

Se o Hibernate está mantendo o pedido, como posso saber ou controlar o pedido? Eu não quero minha atualização explícita em conflitos de banco de dados com o Hibernate e causar deadlock.

questionAnswers(2)

yourAnswerToTheQuestion