Setar o cache de um sequence (Oracle) no Annotation de uma entidade

4 respostas
rodrigo_flausino

Ae, pessoal, blz! Eu to tentando criar uma entidade com uma sequência (sequence), mas o Oracle XE sempre seta a sequência com um cache de valor 20. Alguém conhece o parâmetro ou annotation para eu poder setar o valor desta propriedade e deixar como NOCACHE?

A minha entidade está assim:

@Id @SequenceGenerator(name = "CLIENTE_ID_SEQ", sequenceName = "CLIENTE_ID_SEQ", allocationSize=1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CLIENTE_ID_SEQ") private int id;

Eu to usando o Hibernate para fazer o schema e criar as tabelas.

4 Respostas

plentz

Já tentou assim?

rodrigo_flausino

Mesmo com allocationSize igual a 0, a seqüência é criada com o cache. Tipo, se eu faço algumas inserções seguidas (por exemplo, com os IDs 1,2,3 e 4 (que a seqüência gera)), ele funciona normal. Se eu espero algum tempo e faço uma nova inserção, o Oracle gera ID com o cache (e o ID, ao invés de ser ID=5, passa a ser ID=21).

Eu queria ver se eu conseguiria setar o cache num annotation (e eu não precisar abrir o banco e setar a seqüência manualmente).

Alexandre_Vilas_Boas

rodrigo_flausino:

Eu queria ver se eu conseguiria setar o cache num annotation (e eu não precisar abrir o banco e setar a seqüência manualmente).

isso é com o allocationSize como o Diego sugeriu.

Será que outro objeto (uma classe, trigger, procedure etc) não esta usando a mesma sequence?

vale lembrar que se você manda salvar um objeto e alguma exceção é lançada, tua sequence pode ter sido incrementada.

[]'s

O

rodrigo_flausino:
Mesmo com allocationSize igual a 0, a seqüência é criada com o cache. Tipo, se eu faço algumas inserções seguidas (por exemplo, com os IDs 1,2,3 e 4 (que a seqüência gera)), ele funciona normal. Se eu espero algum tempo e faço uma nova inserção, o Oracle gera ID com o cache (e o ID, ao invés de ser ID=5, passa a ser ID=21).

Eu queria ver se eu conseguiria setar o cache num annotation (e eu não precisar abrir o banco e setar a seqüência manualmente).

Uma sequence em Oracle trabalha assim mesmo. Não é possivel garantir continuidade, apenas unicidade. Por menor que você deixe o buffer (mesmo configurando no BD), pode surgir gaps na sequencia. Se você quer garantir continuidade, não pode usar sequence do Oracle.

Criado 22 de fevereiro de 2007
Ultima resposta 27 de fev. de 2007
Respostas 4
Participantes 4