Auto Incremento no Hibernate para o Postgres

7 respostas
A

Estou com a seguinte classe mapeada com Anotações para o Hibernate:

@Entity(name="usuario")
@SequenceGenerator(name="usuario_codigo_usuario_seq", sequenceName="usuario_codigo_usuario_seq", allocationSize=1)
public class Usuario {

	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="usuario_codigo_usuario_seq")
	@Column(name="codigo_usuario")
	private int codigo;
	
	@Column(name="login_usuario", insertable=true, updatable=true)
	private String login;
	
	@Column(name="senha_usuario")
	private String senha;
	
	@Column(name="tipo_usuario", length=1)
	private String tipo;
	
	@Column(name="nome_usuario")
	private String nome;

	//setters and getters
	
}

Ele está funcionando normal. Porém quando eu vejo no registro do banco de dados, a chave primária está indo de 50 em 50! e a sequencia está para ser de 1 em 1.
Porque o Hibernate está fazendo isso?
Segue abaixo o log do Hibernate:

Hibernate: select nextval (‘usuario_codigo_usuario_seq’)
Hibernate: insert into usuario (login_usuario, nome_usuario, senha_usuario, tipo_usuario, codigo_usuario) values (?, ?, ?, ?, ?)

7 Respostas

A

cara,

é so vc mudar sua sequnce no banco para incrementar de 1 em 1.

t+

A

alissonvla:
cara,

é so vc mudar sua sequnce no banco para incrementar de 1 em 1.

t+

Como eu disse, ele está apra incrementar de 1 em 1, pois a coluna foi declarada como tipo SERIAL.

Tanto é que quando eu coloco para o Hibernate cadastrar vários objetos de uma vez, ele cadastra usando chaves primárias incrementadas de 1 em 1, porém no primeiro objeto a chave soma com 50!

A

vai no banco, na sequnce e clica no botão direito e vai em propriedade, e ve se ta tudo certinho.

t+

A

alissonvla:
vai no banco, na sequnce e clica no botão direito e vai em propriedade, e ve se ta tudo certinho.

t+

Sim está… Minha sequence:

CREATE SEQUENCE usuario_codigo_usuario_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 5
  CACHE 1;
ALTER TABLE usuario_codigo_usuario_seq OWNER TO postgres;

Se eu cadastrar um novo usuario, ele vai para o valor 300 agora. E se eu reiniciar a aplicação e cadastrar um novo usuario, ele vai para 350.

A

Pelo que eu entendi, na primeira vez o Hibernate não faz uso do Sequence… e depois ele continua fazendo, porque?

A

estranho,

pq eu uso em meu projeto, e funciona perfeito, sempre pegando a sequence.

t+

A

Que doido… troquei do SEQUENCE para o AUTO

@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator=“usuario_codigo_usuario_seq”)

E deu certo… agora ele tah usando a sequence certinho…

Criado 12 de outubro de 2011
Ultima resposta 12 de out. de 2011
Respostas 7
Participantes 2