Chave primaria em insert com theads

Pessoal, tenho que fazer insert em um banco oracle onde uma das tabelas nao usa sequence na chave primaria. Eu pegava o ultimo e incrementava mas como é feito em paralelo em alguns momentos ele não consegui inserir por violação da chave que se repete.
Alguem tem alguma ideia pra solucionar esse problema?

Valeu. :frowning:

Você terá que usar sincronização no método que faz o insert.

Coloca a palavra synchronized nele e já deve funcionar:
public synchronized void seuMetodoDeInsert()

Tudo que estiver dentro desse bloco só poderá ser executado por uma thread de cada vez, então, você tem a garantia de que o método fará o incremento antes de outra thread tentar fazer o insert.

Entretanto, se várias máquinas fizerem insert ao mesmo tempo, há uma remota possibilidade desse problema voltar a se repetir. A sincronização só é garantida num mesmo programa.

Uma das únicas formas de garantir 100% é colocando um servidor para controlar isso. Ou um servidor de aplicação, ou, como você já viu feito, o proprio servidor de banco de dados (através do SEQUENCE).

O problema q existia em sincronizar era q ele ficaria quase sequencial por ser um bloco grande mas com algumas mudanças no banco deu pra sincronizar somente uma pequena parte sem comprometer tudo.

Valeu :smiley: .