Pessoal, estou usando o hibernate (jpa) e postgresql 8. Fiz o seguinte mapeamento:
import java.io.File;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
@Entity
@Table(name="state")
@SequenceGenerator(name="state_seq",sequenceName="state_seq")
public class Estado {
private int id;
private String nome;
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="state_seq")
@Column(name="id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="name")
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public static void main(String[] args) {
Configuration cfg = new AnnotationConfiguration();
File f = new File("src/hibernate/hibernate.cfg.xml");
cfg.configure(f);
SessionFactory sessionFactory = cfg.buildSessionFactory();
ThreadLocal<Session> thread = new ThreadLocal<Session>();
Session s;
s = sessionFactory.openSession();
thread.set(s);
Transaction t = s.beginTransaction();
Estado e = new Estado();
e.setNome("Paraná");
s.save(e);
t.commit();
s.close();
}
}
Rodei o main 2 vezes (passando “Paraná” e “Santa Catarina” como nome de estados), fiz o select na tabela state no postgres e vi que os id’a eram 50 e 100. Achei estranho então dei um select nextval('state_seq');
o que me retornou 3 (o certo considerando que a sequencia teria sido usada duas vezes).
Então minha pergunta é: porque o hibernate está gravando de 50 em 50 os id’s? Existe algum meio para evitar isso?
Valeu.
Filipe.