SequenceGenerator Hibernate + PostgreSQL [RESOLVIDO]

4 respostas
M

daew galera, estou com um problema para utilizar o sequence generator, tenho as sequence definidas no bd, porem não consigo fazer o hibernate utiliza-las

Estado.java
@Entity
@Table(name="\"Estados\"")
public class Estados implements Serializable {

	@Id
	@Column(name="est_codigo")
	@SequenceGenerator(name="Estado_Seq", sequenceName="Estado_est_codigo_seq", allocationSize=1)
	@GeneratedValue(strategy=GenerationType.AUTO, generator="Estado_Seq")
	private int estCodigo;
	@Column(name="est_nome")
	private String estNome;
	@Column(name="est_abreviatura")
	private String estAbreviatura;
Metodo onde esta sendo inserido um novo estado no BD
public static void main(String[] args) {

		EstadosService estService = new EstadosService();
		Estados est = new Estados();
		est.setEstCodigo(1);
		est.setEstNome("Rio Grande do Sul");
		est.setEstAbreviatura("RS");
		estService.insert(est);
	}
EstadosService.java
public class EstadosService extends ServiceImplements<Estados> {
	
	public EstadosService() {
		super(Estados.class);
	}
}
Metodo insert do arquivo ServiceImplements
public T insert(T obj) {
		initTransaction();
        try {
            entityManager.persist(obj);
            commitTransaction();
        } catch (Exception e) {
            logger.error("Erro ao inserir objeto:", e);
            rollbackTransaction();
        }
        return null;
	}

Se as linhas @SequenceGenerator e @GeneratedValue do Estado.java ficam comentadas e passo um codigo diferente a cada inserção funciona normalmente, porem com o hibernate controlando a geração dos codigos não funciona

abraços

4 Respostas

K

Cara,

Aqui onde trabalho, temos a seguinte classe:

@Entity
@Table(name = "pessoa", schema = "public")
@SequenceGenerator(name="PESSOA_SEQ", sequenceName="pessoa_id_pessoa_seq", allocationSize=1)
public class Pessoa implements java.io.Serializable {

	private static final long serialVersionUID = 2009100211L;
	private Integer idPessoa;
	
	@Id
	@Column(name = "id_pessoa", unique = true, nullable = false, length = 14)
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PESSOA_SEQ")
	public Integer getIdPessoa() {
		return this.idPessoa;
	}
}

Acho q está faltando a seguinte anotação na sua classe:
@SequenceGenerator(name="Estado_Seq", sequenceName="xxx", allocationSize=1)

Dê uma verificada nisso.

[]'s

M

A anotação @sequencegenerator esta ali, porem acima do atributo, vou coloca-lo acima da classe, vai que seja a localização, depois posto o result

vlw pela dica

[]'s

M

Não deu certo brother ... não retorna erro e nem grava no banco, a unica coisa q retorna é

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). log4j:WARN Please initialize the log4j system properly.
segue Estado.java
@Entity
@Table(name="\"Estados\"")
@SequenceGenerator(name="Estado_Seq", sequenceName="Estado_est_codigo_seq", allocationSize=1)
public class Estados implements Serializable {

	@Id
	@Column(name="est_codigo")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Estado_Seq")
	private int estCodigo;
	@Column(name="est_nome")
	private String estNome;
	@Column(name="est_abreviatura")
	private String estAbreviatura;

[]'s

M

Resolvido, apenas troquei o tipo de strategy na anotação @GeneratedValue, de AUTO e SEQUENCE que havia utilizado para IDENTITY, ficando assim a classe Estado.Java

@Entity
@Table(name="\"Estados\"")
@SequenceGenerator(name="Estado_Seq", sequenceName="Estado_est_codigo_seq", allocationSize=1)
public class Estados implements Serializable {

	@Id
	@Column(name="est_codigo")
	@GeneratedValue(strategy=GenerationType.IDENTITY, generator="Estado_Seq")
	private int estCodigo;
	@Column(name="est_nome")
	private String estNome;
	@Column(name="est_abreviatura")
	private String estAbreviatura;

mesmo assim vlw pela ajuda

Criado 5 de outubro de 2009
Ultima resposta 5 de out. de 2009
Respostas 4
Participantes 2