O driver oracle deve retornar contagens de linhas corretas. Ficarei surpreso se este não for o caso. Você conseguiu confirmar se os resultados do driver estão corretos? Você pode ativar o registro do Hibernate para verificar isso.
Algumas coisas para verificar:
-
Registre o SQL real que está sendo enviado ao banco de dados e verifique se a coluna de versão é mencionada na cláusula where. Não tenho certeza se os SQLs são registrados pelo log do Hibernate com lotes ativados, você pode ter que recorrer a uma maneira diferente de registrar os SQLs (por exemplo, p6spy)
-
Se as contagens de linha estiverem sendo retornadas corretamente durante as atualizações simultâneas, o aplicativo está funcionando bem. Confirme isso verificando se os valores da coluna de versão estão atualizados e corrigidos.
Atualizar De acordo com o link a seguir, esse problema estava presente com o driver Oracle até 11g e corrigido na versão 12c
https://hibernate.atlassian.net/browse/HHH-3360
Para versões anteriores do Oracle, há algumas informações adicionais que devem ser úteis, ou seja, uma solução personalizada é fornecida.
Recursos adicionais:https://hibernate.atlassian.net/browse/HHH-5070