Postgres + hibernate + jpa (Erro de next sequence )

Olá para todos, eu estou iniciando um estudo de hibernate + jpa + postgres, obtive o tutorial da Rafaela e fui fazer um exemplo, os erros foram surgindo, falta de jar, arquivo no lugar errado, mas nesse erro do log abaixo eu empaquei.
Saliento que eu já criei no pgAdmin o hibernate_sequence, vi vários mensagens antigas, mas não consegui ainda.
Desde já agradeço quem puder ajudar.

2008-03-10 15:36:53 INFO [main] (Version.java:15) - Hibernate Annotations 3.3.0.GA
2008-03-10 15:36:53 INFO [main] (Environment.java:514) - Hibernate 3.2.5
2008-03-10 15:36:53 INFO [main] (Environment.java:547) - hibernate.properties not found
2008-03-10 15:36:53 INFO [main] (Environment.java:681) - Bytecode provider name : cglib
2008-03-10 15:36:53 INFO [main] (Environment.java:598) - using JDK 1.4 java.sql.Timestamp handling
2008-03-10 15:36:53 INFO [main] (Configuration.java:1426) - configuring from resource: hibernate.cfg.xml
2008-03-10 15:36:53 INFO [main] (Configuration.java:1403) - Configuration resource: hibernate.cfg.xml
2008-03-10 15:36:53 INFO [main] (Configuration.java:1541) - Configured SessionFactory: null
2008-03-10 15:36:53 INFO [main] (AnnotationBinder.java:398) - Binding entity from annotated class: br.com.jeebrasil.hibernate.anotacoes.dominio.Aluno
2008-03-10 15:36:54 INFO [main] (EntityBinder.java:420) - Bind entity br.com.jeebrasil.hibernate.anotacoes.dominio.Aluno on table aluno
2008-03-10 15:36:54 INFO [main] (AnnotationConfiguration.java:350) - Hibernate Validator not found: ignoring
2008-03-10 15:36:54 INFO [main] (DriverManagerConnectionProvider.java:41) - Using Hibernate built-in connection pool (not for production use!)
2008-03-10 15:36:54 INFO [main] (DriverManagerConnectionProvider.java:42) - Hibernate connection pool size: 10
2008-03-10 15:36:54 INFO [main] (DriverManagerConnectionProvider.java:45) - autocommit mode: false
2008-03-10 15:36:54 INFO [main] (DriverManagerConnectionProvider.java:80) - using driver: org.postgresql.Driver at URL: jdbc:postgresql://localhost:5432/jeeBrasil
2008-03-10 15:36:54 INFO [main] (DriverManagerConnectionProvider.java:86) - connection properties: {user=postgres, password=****}
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:89) - RDBMS: PostgreSQL, version: 8.2.5
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:90) - JDBC driver: PostgreSQL Native Driver, version: PostgreSQL 8.3devel JDBC3 with SSL (build 601)
2008-03-10 15:36:54 INFO [main] (Dialect.java:152) - Using dialect: org.hibernate.dialect.PostgreSQLDialect
[color=red]Exception in thread “main” org.hibernate.exception.SQLGrammarException: could not get next sequence value
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:96)
at org.hibernate.id.SequenceHiLoGenerator.generate(SequenceHiLoGenerator.java:58)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:99)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at br.com.jeebrasil.hibernate.anotacoes.testes.Listagem12.main(Listagem12.java:39)
Caused by: org.postgresql.util.PSQLException: ERROR: relation “hibernate_sequence” does not exist
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1547)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1315)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:190)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:75)
… 11 more[/color]
2008-03-10 15:36:54 INFO [main] (TransactionFactoryFactory.java:31) - Using default transaction strategy (direct JDBC transactions)
2008-03-10 15:36:54 INFO [main] (TransactionManagerLookupFactory.java:33) - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:143) - Automatic flush during beforeCompletion(): disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:147) - Automatic session close at end of transaction: disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:154) - JDBC batch size: 15
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:157) - JDBC batch updates for versioned data: disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:162) - Scrollable result sets: enabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:170) - JDBC3 getGeneratedKeys(): disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:178) - Connection release mode: auto
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:205) - Default batch fetch size: 1
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:209) - Generate SQL with comments: disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:213) - Order SQL updates by primary key: disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:217) - Order SQL inserts for batching: disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:386) - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
2008-03-10 15:36:54 INFO [main] (ASTQueryTranslatorFactory.java:24) - Using ASTQueryTranslatorFactory
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:225) - Query language substitutions: {}
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:230) - JPA-QL strict compliance: disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:235) - Second-level cache: enabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:239) - Query cache: disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:373) - Cache provider: org.hibernate.cache.NoCacheProvider
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:254) - Optimize cache for minimal puts: disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:263) - Structured second-level cache entries: disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:283) - Echoing all SQL to stdout
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:290) - Statistics: disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:294) - Deleted entity synthetic identifier rollback: disabled
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:309) - Default entity-mode: pojo
2008-03-10 15:36:54 INFO [main] (SettingsFactory.java:313) - Named query checking : enabled
2008-03-10 15:36:54 INFO [main] (SessionFactoryImpl.java:161) - building session factory
2008-03-10 15:36:54 INFO [main] (SessionFactoryObjectFactory.java:82) - Not binding factory to JNDI, no JNDI name configured
Hibernate: select nextval (‘hibernate_sequence’)
2008-03-10 15:36:54 WARN [main] (JDBCExceptionReporter.java:77) - SQL Error: 0, SQLState: 42P01
2008-03-10 15:36:54 ERROR [main] (JDBCExceptionReporter.java:78) - ERROR: relation “hibernate_sequence” does not exist

A classe é esta:

package br.com.jeebrasil.hibernate.anotacoes.dominio;

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;

// Anotação que informa que a classe mapeada é persistente
@Entity
// Informando nome e esquema da tabela mapeada
@Table(name = "aluno", schema = "anotacoes")
@SequenceGenerator(name = "hibernate_sequence", sequenceName = "hibernate_sequence") 
public class Aluno {
	
	private int id;
	private int matricula;
	private String nome;
	private long cpf;
	
	// Definição da chave primária
	@Id
	// Definição do mecanismo de definição da chave primária
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="hibernate_sequence")
	// Informa o nome da coluna mapeada para o atributo
	@Column(name = "id_aluno")
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getMatricula() {
		return matricula;
	}

	public void setMatricula(int matricula) {
		this.matricula = matricula;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public long getCpf() {
		return cpf;
	}

	public void setCpf(long cpf) {
		this.cpf = cpf;
	}

	public void Aluno() {
	}

}

Tudo bem que o post é antigo, mas quando fazemos busca no Google ele aparece, e aprece sem resposta.
Por isso vou por a resposta aqui.

Isso acontece quando o Hibernate tenta encontrar uma “sequence” e não encontra, e como não foi definido um nome para esta sequência, ele usa um nome padrão: hibernate_sequence.

Para resolver o problema, crie uma sequence no Postgre, e passe o nome dela no mapeamento:

        <id column="cd_auditoria" name="idEntidade" type="long">
            <generator class="sequence" >
                <param name="sequence">auditoria_cd_auditoria_seq</param>
            </generator>
        </id>

Ai, problema resolvido. :slight_smile:

xdraculax você podria especificar que arquivo seria esse?

Cara, é o HBM de mapeamento da entidade em questão.

mas se não estiver usando esse arquivo tiver usando anotações.

Boa pergunta!

Eu nunca uso anotations, acho que poluem muito o código (isso é pessoal :-)).

Mas cara, deve ter uma annotation para esse parêmetro que foi passado (param name=“sequence”>).

então você pode fazer da seguinte forma:

package br.com.nt4software.ngestoradmin.pojo;

import java.io.Serializable;
import javax.persistence.*;

@Entity
@SequenceGenerator(name = "nome_seq", sequenceName = "nome_seq_no_banco", allocationSize = 1, initialValue = 1)
@Table(name = "nome_da_tabela")
public class HistoricoAcesso implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(generator = "nome_seq") //uso o name que coloquei no @SequenceGenerator
	@Column(name = "id_historico_acesso")
	private int idHistoricoAcesso;

        //mais atributos e os gets/sets
}

repare que logo após a anotação @Entity eu anotei tambem um @SequenceGenerator, onde name é o nome da sequencia para ser usada na id e sequenceName é o nome da sequencia que esta no banco :}

show nathanpsouza, muito massa valeu cara e obrigado taqmbém xdraculax.

obrigado
me tirou de dois dias empacado em codigo.
abs

nathanpsouza ou quem puder me ajudar !!

Estou começando a trabalhar com vRaptor e Hibernate agora, seguindo uma apostila da caelum.
Não estou conseguindo resolver meu problema com essas anotações, acho que estou fazendo algo errado, aqui vai a exception

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
org.hibernate.exception.SQLGrammarException: could not get next sequence value
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:96)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:99)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
	at br.com.caelum.vraptor.teste.AdicionaProdutos.main(AdicionaProdutos.java:36)
Caused by: org.postgresql.util.PSQLException: ERRO: relação "public" não existe
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
	at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:75)
	... 10 more

criei minha tabela no postgresql

create table Produto(
id serial primary key,
nome varchar(50) not null,
descricao varchar(200) not null,
preco real not null);

e recebi as mensagens de retorno

NOTA: CREATE TABLE criará sequência implícita “produto_id_seq” para coluna serial "produto.id"
NOTA: CREATE TABLE / PRIMARY KEY criará índice implícito “produto_pkey” na tabela "produto"
Query returned successfully with no result in 75 ms.

Bom, o fato é que não sei se estou fazendo essas anotações da forma correta, ja tentei de várias formas e não consigo encontrar a solução. Tentei realizar da mesma forma como o nathanpsouza mostrou, mas continua gerando esta exception, vou postar minha classe abaixo:

Classe Produtos

[code]import java.io.Serializable;
import javax.persistence.*;

@Entity
@SequenceGenerator(name=“produto_id_seq” ,sequenceName="NAO SEI O QUE PASSAR AQUI ", allocationSize=1 ,initialValue=1)
@Table(name=“produto”)
public class Produto implements Serializable {

@Id
@GeneratedValue(generator="produto_id_seq")
@Column(name="id")
private int id;
private String nome;
private String descricao;
private Double preco;[/code]

Classe de gravação de produtos!

[code]import br.com.lojaonline.vraptor.models.Produto;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

public class AdicionaProdutos {

public static void main(String []args){
   
    try {
        //Cria a classe de configuração do Hibernate
    AnnotationConfiguration hibernate = new AnnotationConfiguration();
    //O método configure irá ler o hibernate.cfg.xml
    hibernate.configure();
    
    //cria uma fábrica de sessões
    SessionFactory factory = hibernate.buildSessionFactory();
    //cria uma session e inicializa a mesma
    Session sessao = factory.openSession();
    
    Produto p = new Produto();
    p.setNome("Celular");
    p.setDescricao("Samsumg Galaxy Ace");
    p.setPreco(389.0);
    
    //Transaction será o responsável por executar o insert no banco de dados
    Transaction insert = sessao.beginTransaction();
    sessao.save(p);
    insert.commit();
    } catch (Exception e) {
        e.printStackTrace();
    }
    
}[/code]

Obrigado pela atenção, espero que me ajudem pois desejo fazer meu TCC utilizando esse framework ! Obrigado !

Ai vc passa o nome da sua sequence que ta no banco de dados

Igor, sim eu entendo, mas não sei qual é .

NOTA: CREATE TABLE criará sequência implícita “produto_id_seq” para coluna serial "produto.id"
NOTA: CREATE TABLE / PRIMARY KEY criará índice implícito “produto_pkey” na tabela “produto”

é alguma dessas ? Já passei todas e não deram certo !

Ou eu tenho que criar uma sequencia ? - Create sequence nomesequencia ?

Sim, vc tem que criar a sequence no banco de dados…

agora se vc está configurado para o hibernate criar tudo sozinho,
acho que somente com a @GeneratedValue(strategy=SequenceType.SEQUENCE) (acho que é essa a sintaxe) ja vai criar ela pra vc…

@SequenceGenerator(name="PRODUTO_GENERATION" ,sequenceName="produto_id_seq ", allocationSize=1 ,initialValue=1) 
@GeneratedValue(generator="PRODUTO_GENERATION", strategy=SequenceType.SEQUENCE)  

Ae, deu certo, criei a sequencia e ele gerou o banco e fez o insert !

Valeu pela ajuda pessoal !