Erro [RESOLVIDO]

13 respostas
Jarf

Olá amigos,
estou tentando salvar os dados no BD mas está dando um erro que eu não sei o que é.

Classe para salvar
public class AdicionarCubo {

	
	public static void main(String[] args) {
		
		Session session = new HibernateFactory().getSession();
		
		Cubo c = new Cubo();
		c.setNome("Teste");
		c.setServidor("Unigranrio");
		c.setConexaoUrl("jdbc:postgresql://localhost:5332/xxxx");
		c.setConexaoUsuario("xxxx");
		c.setConexaoSenha("12345");
		c.setConexaoDriver("org.postgresql.Driver");
		c.setTempoRefresh(1);
		
		CuboDAO cuboDAO = new CuboDAO(session);
		cuboDAO.salvar(c);
		
		
		session.close();

		
	}
Erro
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not get next sequence value
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:119)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:122)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:562)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:550)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:546)
	at controle.CuboDAO.salvar(CuboDAO.java:22)
	at dominio.AdicionarCubo.main(AdicionarCubo.java:24)
Caused by: org.postgresql.util.PSQLException: ERROR: relation "hibernate_sequence" does not exist
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1548)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1316)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:351)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:255)
	at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:98)
	... 11 more

Alguem poderia me ajudar? :(

Vlw!!!

13 Respostas

lcegatti

Sua definição da sequence para o id da classe Cubo está errada, qualquer poste o fonte desta classe ae.

[]'s

Jarf
Essa é a classe Cubo.
@Entity
public class Cubo {
	
	@Id @GeneratedValue
	private int idcubo;
	
	@Column (nullable = true)
	private String nome;
	
	@Column (nullable = true)
	private String servidor;
	
	@Column (name = "conexao_url", nullable = true)
	private String conexaoUrl;
	
	@Column (name = "conexao_usuario", nullable = true)
	private String conexaoUsuario;
	
	@Column (name = "conexao_senha", nullable = true)
	private String conexaoSenha;
	
	@Column (name ="conexao_driver", nullable = true)
	private String conexaoDriver;
	
	@Column (name = "tempo_refresh")
	private int tempoRefresh;
	
	
	public int getIdcubo() {
		return idcubo;
	}
	public void setIdcubo(int idcubo) {
		this.idcubo = idcubo;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getServidor() {
		return servidor;
	}
	public void setServidor(String servidor) {
		this.servidor = servidor;
	}
	public String getConexaoUrl() {
		return conexaoUrl;
	}
	public void setConexaoUrl(String conexaoUrl) {
		this.conexaoUrl = conexaoUrl;
	}
	public String getConexaoUsuario() {
		return conexaoUsuario;
	}
	public void setConexaoUsuario(String conexaoUsuario) {
		this.conexaoUsuario = conexaoUsuario;
	}
	public String getConexaoSenha() {
		return conexaoSenha;
	}
	public void setConexaoSenha(String conexaoSenha) {
		this.conexaoSenha = conexaoSenha;
	}
	public String getConexaoDriver() {
		return conexaoDriver;
	}
	public void setConexaoDriver(String conexaoDriver) {
		this.conexaoDriver = conexaoDriver;
	}
	public int getTempoRefresh() {
		return tempoRefresh;
	}
	public void setTempoRefresh(int tempoRefresh) {
		this.tempoRefresh = tempoRefresh;
	}
	
	

}
Jarf

Se eu tirar o @GeneratedValue da certo, mas ai tenho que colocar o id pq nao fica + automatico.
Pq está acontecendo isso com o @GeneratedValue ?

lcegatti

Então … qdo vc coloca apenas o GeneratedValue ele tenta buscar no banco a sequence de nome: “hibernate_sequence”, que no caso não existe no seu Banco, vc pode configurar nas propriedades do seu hibernate para ele gerar automaticamente o ddl no seu banco, o que faria ele criar a sequence.

Insira o GeneratedValue de novo no seu id e coloque esta propriedade no seu xml de config do hibernate:

<property name="hibernate.hbm2ddl.auto">update</property>

Se for JPA insira isto no seu persistence.xml:

<property name="hibernate.hbm2ddl.auto" value="update"/>

Ve se funfa …

[]'s

Jarf

Eu não tenho arquivo xml amigo ;/

lcegatti

Editei a msg … ve la

[]'s

Jarf

eu so tenho hibernate.properties :frowning:

danielbussade

Olá dá uma olhada aqui vê se te ajuda:

http://jroller.com/eliasn/entry/iniciando_no_hibernate_entitymanager_com

lcegatti

Jarf:
eu so tenho hibernate.properties :frowning:

Então da na mesma, isso que eu te passei são propriedades que vc insere tanto no xml qto no .properties, e no seu caso é só inserir isto em qualquer linha do seu arquivo de propriedades:

hibernate.hbm2ddl.auto = update;

[]'s

Jarf

eu fiz o que vocês 2 indicaram e nao deu certo…

no que vc disse deu o seguinte erro, ice:

Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not get next sequence value at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:119) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:122) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:562) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:550) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:546) at controle.CuboDAO.salvar(CuboDAO.java:22) at dominio.AdicionarCubo.main(AdicionarCubo.java:24) Caused by: org.postgresql.util.PSQLException: ERROR: relation "hibernate_sequence" does not exist at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1548) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1316) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:351) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:255) at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:98) ... 11 more

lcegatti

Va no Postgres e crie a sua sequence:

CREATE SEQUENCE hibernate_sequence START 1;

Ow siga o exemplo que o danielbussade passou e de o mesmo comando no seu postgres com o nome da sequence correspondente.

[]'s

Jarf

Ice, vc poderia me tirar uma duvida?

eu estava olhando esse exemplo ai q o mauro deu: http://www.guj.com.br/posts/list/38302.java#204040

o que seria o “nome_da_sequencia” ?

malz pela ignorancia… eu sou iniciante ;/

[]'s

Jarf

Ahh… consegui resolver…
No caso, é a sequencia que vc falou pra eu criar. "hibernate_sequence"
Obrigado pela ajuda galera :wink:

[]'s

Criado 13 de outubro de 2008
Ultima resposta 13 de out. de 2008
Respostas 13
Participantes 3