Org.postgresql.util.PSQLException: ERRO: relação "hibernate_sequence" não existe[Resolvido]

8 respostas
J

Olá Pessoal!

Estou desenvolvendo uma aplicação em JSF + BD PostgreSQL + Hibernate. O erro que acontece quando tento inserir uma informação na tabela é o seguinte;
org.postgresql.util.PSQLException: ERRO: relação “hibernate_sequence” não existe. No BD o ID é autoincremento e nome de sua sequencia é; contas_cont_codigo_seq, quando eu mudo o nome desta sequencia para “hibernate_sequence” ocorre outro erro que é o seguinte; insiro uma nova tabela com um campo autoincremento, quando faço a inserção nesta tabela pela classe criada no Java é iserido um numero após o ultimo que foi criado na tabela anterior EX;

Tabela Contas; o ultimo registro teve o ID de numero 5
Tabela Pessoa; o primeiro registro teve o ID de numero 6

segue abaixo como esta a classe no Java;

package br.com.ses.modelo.bean;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;

@Entity(name="contas")
@SequenceGenerator(name="contas_cont_codigo-seq", sequenceName="contas_cont_codigo-seq")
public class Conta {
	private Integer cont_codigo;
	private String cont_nome;
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	public Integer getCont_codigo() {
		return cont_codigo;
	}
	
	public void setCont_codigo(Integer cont_codigo) {
		this.cont_codigo = cont_codigo;
	}
	
	public String getCont_nome() {
		return cont_nome;
	}
	
	public void setCont_nome(String cont_nome) {
		this.cont_nome = cont_nome;
	}
	
}

o que posso fazer para corrigir este erro?

8 Respostas

H

Se você tem sua própria sequencia você tem que colocar:
@GeneratedValue(strategy=GenerationType.AUTO)

Coloca do tipo sequence. [=

A

cara,

vc tem q criar a sequence, segue ai

CREATE SEQUENCE hibernate_sequence
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 2760
  CACHE 1;
ALTER TABLE hibernate_sequence OWNER TO postgres;

t+

J

Olá jakefrog!

Se vc verificar já fiz isto, coloquei a anotação em cima do metodo.

Olá alissonvla!

Já fiz isto, como frizei no texto ocorre outro erro.

Y

Olá,
Você está deixando o próprio Hibernate criar a base?
Tente algo assim:

@Id
	@SequenceGenerator(name="CONTA_ID_GENERATOR", sequenceName="CONTA_ID_SEQ", allocationSize=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CONTA_ID_GENERATOR")
        private Integer cont_codigo;;

E remova as outras anotações referentes à sequence que estão na classe.
Com essas anotações, ao criar o banco o hibernate irá criar a sequence CONTA_ID_SEQ que será vinculada a sua tabela contas.

[]'s
Daniel

H

Não mano, estou falando desse código aqui: @Id @GeneratedValue(strategy=GenerationType.AUTO) public Integer getCont_codigo() { return cont_codigo; } Tire o auto daí e coloque sequence.

J

Olá Daniel!

Agora funcionou e corretamente sem mudar o nome da sequencia no BD, Muito Obrigado pela ajuda!

Olá jakefrog!

Eu já tinha feito isto mas não havia dado certo, fiz o que Daniel orientou e deu certo. Muito Obrigado pela ajuda!

H

Blz. Mas só fique atento a uma coisa, você utilizando o hibernate_sequence e deixando auto para todo mundo.

Ao cadastrar uma casa o ID será 1. Ao se cadastrar um cachorro o ID será 2 mesmo sendo o primeiro cachorro cadastrado.

J

Olá jakefrog!

Fico agradecido pela sua informação e ajuda!!!

Criado 6 de novembro de 2011
Ultima resposta 7 de nov. de 2011
Respostas 8
Participantes 4