Seu problema é alta concorrência.
Por ser um banco com acessos heterogênios cada aplicação deve manter seu lock pessimista.
A minha pergunta é: "Vc sabe programar Threads ?"
Vc sabe que atualmente vc só consegue dar lock enquanto estiver com a sessão do hibernate correto ?
A solução é que enquanto vc estiver na sessão do hibernate, lançar uma thread de verificação do tempo de inatividade da sua sessão http, lockando o mesmo campo numa outra sessão do hibernate.
Na segunda chamada pra atualização, vc usa NotifyAll e acorda essa thread e ela libera o lock em seguida vc pega o campo com outra sessão do hibernate e atualiza o dado, no fim do commit seu lock é liberado.
Isso impede os sistemas em Delphi de pegar o banco mas pra chamadas em seu webservice vc tem que implementar através de variável de sessão.