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. 
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
.