Eu sei que usar sequence da forma como estou precisando já inválida o propósito da JPA, pois nem todo banco tem esse recurso. Sei claramente disso. Mas para o problema que temos aqui é justamente isso que precisamos, seja com JPA ou via trigger no banco (como também to pensando em fazer).
Com relação ao que o “luuucass” falou, não é isso que estou querendo. Usar o @GeneratedValue não é o que estou querendo, pois esta estrategia serve bem quando temos a sequence já cadastrada no banco e quando sempre o campo vai usar a mesma sequence, como por exemplo, primary key.
Vocês devem ta achando estranho o fato de criar uma sequence para cada usuário. Mas não é bem assim. O problema é o seguinte.
Vou da um exemplo simples. Imagine que temos uma classe Pessoa e uma classe, digamos, Pedido. Pedido esta relacionado com Pessoa. Só que temos um campo, que não é o ID, em Pedido que é sequencial e deve ser incremental iniciando de 1 e indo 2,3,4… para cada pessoa. Então cada Pessoa tem seus pedidos e seus pedidos tem o valor desse atributo incremental inicando de 1 até… n . Dessa forma, quando criarmos uma pessoa, preciso criar uma sequence para esse atributo também, relacionado com esta Pessoa como SEQ_NUM_REFERENCIA_PEDIDO_<ID_PESSOA>. Então, quando for incluir um pedido no banco a sequence especifica desse atributo para esta pessoa, será usada para setar o valor desse atributo.
Por isso que tenho que criar a sequence em tempo de execução.
Sei que não é algo trivial, sei que não é comum, nem julgo a melhor forma de se fazer. Inclusive, poderia até fazer um count no número de pedidos da pessoa e incrementar 1 no valor do atributo. Mas aí é que ta, nosso projeto tem uma alta concorrência e não posso contar que o count de registro no banco naquele momento vai ser o real no momento da real persistencia do registro.
Sei que isso não é comum e foge do padrão normal mas isso é um requisito que temos aqui e assim é que deve ser feito. A forma como será feita é que quero ver a melhor abordagem.
Fazer a trigger no banco também pensei nisso e estou avaliando isso. O que eu queria saber, é se a API da JPA me provê alguma algum recurso para isso.
Obrigado.