Opa,
ai a gente começa a ver o problema do paralelismo né? No caso, você precisa garantir que a fonte do seu número sequencial seja o mais isolada possível, ou seja, que apenas um componente do seu sistema seja o responsável por atualizá-lo quando necessário.
No caso do Grails, é possível fazer isto pelo framework sim, mas não te garante segurança alguma, porque imagine que de repente, em um futuro distante mais de uma aplicação precise gerar o mesmo número sequencial. Podem haver problemas.
Minha sugestão neste caso é que você não implemente isto nem em Grails nem em nenhuma outra linguagem, mas sim como um trigger do próprio banco de dados e deixe esta responsabilidade APENAS para o SGBD. Assim, não há como duas aplicações concorrentes se atrapalharem.
Ai, o que você deveria fazer é o seguinte: visto que o código da sua nota usa este sequencial, inclua um evento após a persistência da sua entidade que busque apenas o valor deste campo caso queira aproveitar a mesma instância que acabou de criar. Caso não seja o caso, na próxima consulta do BD já vai ser criada uma nova instância com o campo devidamente preechido pra você.
Legal,
costumo fazer usando trigger no banco, crio uma sequence e a função disparada pega o próximo da
sequence e ela já fica atualizada.
Mas não sendo o caso de aplicações concorrentes, como u poderia através do Grails apenas pegar
o proximo vamor de uma sequence?
Vlw!
Evandro
Só pelo Grails mesmo o que eu faria seria a criação de um método que chamasse pra mim (DENTRO DE UMA TRANSAÇÃO <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) --> ) o maior valor do campo autonumerado antes de persistir a entidade, o incrementaria e em seguida o enviaria para o BD.
No caso, eu também faria um lock na tabela pra evitar o acesso concorrente. Mas não recomendo de modo algum cara. Porque se der merda, sua tabela fica trancada pros demais processos também, saca?