Hibernate e sequence pulando de 50 em 50

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.

Galera,estou ressuscitando o tópico pois estou enfrentando exatamente o mesmo problema.Alguem sabe como posso resolver?

Galera,estou ressuscitando mais uma vez o tópico pois estou enfrentando exatamente o mesmo problema de ambos acima. Alguem sabe como posso resolver?

Olá pessoal.

Para o tópico achei a seguinte solução:
Na declaração do “Sequence Generator”, acrescentar esta propriedade e valor. “allocationSize=1”

Ex:

@SequenceGenerator(name = "service_sequence", sequenceName = "service_sequence", allocationSize=1)

Espero que ajude a quem mais estiver com este problema e principalmente aqueles que pesquisam na internet e acham este tópico, onde até o momento não haviam apresentado uma solução.

Qualquer outra maneira de solução será bem vinda.

Grato.

Veja se o DBA criou essa sequence no banco com algum cache de números.

O banco aloca alguns números de antemão e coloca nesse cache, então tem q ver se ele é realmente necessário, e qual a maneira certa de usá-lo.

Valeu Flavio! Estava com o mesmo problema…resolveu aqui agora!

Obrigado