Sequences TopLink + Postgres

Pessoal como eu faco para falar pra minha entity q eu quero usar um a SEQUENCE QUE EU CRIEI??

usei o seguinte codigo para criar a tabela : create sequence db_notas.tb_central_cep_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1; CREATE TABLE db_notas.tb_central_cep( cd_central_cep integer primary key not null default nextval('db_notas.tb_central_cep_seq'), dt_central DATE, hr_central TIME, cd_usuario_central INTEGER, nm_usuario_central VARCHAR(250) );

e gerei a minha entity assim:

@Entity @Table(name = "tb_central_cep", catalog = "db_dnaso", schema = "db_notas") @SequenceGenerator(sequenceName="tb_central_cep_seq",allocationSize=1, initialValue=0, name = "tb_central_cep_seq") @NamedQueries({ @NamedQuery(name = "TbCentralCep.findAll", query = "SELECT t FROM TbCentralCep t"), @NamedQuery(name = "TbCentralCep.findByCdCentralCep", query = "SELECT t FROM TbCentralCep t WHERE t.cdCentralCep = :cdCentralCep"), @NamedQuery(name = "TbCentralCep.findByDtCentral", query = "SELECT t FROM TbCentralCep t WHERE t.dtCentral = :dtCentral"), @NamedQuery(name = "TbCentralCep.findByHrCentral", query = "SELECT t FROM TbCentralCep t WHERE t.hrCentral = :hrCentral"), @NamedQuery(name = "TbCentralCep.findByCdUsuarioCentral", query = "SELECT t FROM TbCentralCep t WHERE t.cdUsuarioCentral = :cdUsuarioCentral"), @NamedQuery(name = "TbCentralCep.findByNmUsuarioCentral", query = "SELECT t FROM TbCentralCep t WHERE t.nmUsuarioCentral = :nmUsuarioCentral")}) public class TbCentralCep implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY, generator="tb_central_cep_seq") @Basic(optional = false) @Column(name = "cd_central_cep", nullable = false) private Integer cdCentralCep;

porem recebo o seguinte ERRO:

[quote]Internal Exception: org.postgresql.util.PSQLException: ERROR: relation “db_notas.tb_central_cep_cd_central_cep_seq” does not exist
Error Code: 0
Call: select currval(‘db_dnaso.db_notas.tb_central_cep_cd_central_cep_seq’)
Query: ValueReadQuery()
[/quote]

ele procura a sequence “nome_da_tabela_nome_do_campo_seq” mas eu quero fazer ele usar a que eu criei com qualquer nome a minha escolha.

valeu

@Entity
@Table(name="NOME_DA_SUA_TABELA")

@Id   
@SequenceGenerator( name = "SEQ", sequenceName = "NOME_DO_SEU_SEQUENCE", allocationSize = 1 )  
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "SEQ" )    
@Column(name = "NOME_DO_SEU_CAMPO_ID")

mlkao nada feito. deixei assim oh :

@Entity @Table(name = "tb_central_cep", catalog = "db_dnaso", schema = "db_notas") @NamedQueries({ @NamedQuery(name = "TbCentralCep.findAll", query = "SELECT t FROM TbCentralCep t"), @NamedQuery(name = "TbCentralCep.findByCdCentralCep", query = "SELECT t FROM TbCentralCep t WHERE t.cdCentralCep = :cdCentralCep"), @NamedQuery(name = "TbCentralCep.findByDtCentral", query = "SELECT t FROM TbCentralCep t WHERE t.dtCentral = :dtCentral"), @NamedQuery(name = "TbCentralCep.findByHrCentral", query = "SELECT t FROM TbCentralCep t WHERE t.hrCentral = :hrCentral"), @NamedQuery(name = "TbCentralCep.findByCdUsuarioCentral", query = "SELECT t FROM TbCentralCep t WHERE t.cdUsuarioCentral = :cdUsuarioCentral"), @NamedQuery(name = "TbCentralCep.findByNmUsuarioCentral", query = "SELECT t FROM TbCentralCep t WHERE t.nmUsuarioCentral = :nmUsuarioCentral")}) public class TbCentralCep implements Serializable { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @SequenceGenerator(name = "SEQ", sequenceName="tb_central_cep_seq",allocationSize=1) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ") @Column(name = "cd_central_cep", nullable = false) private Integer cdCentralCep; @Column(name = "dt_central") @Temporal(TemporalType.DATE)

e recebi o mesmo erro:

[quote]avax.persistence.RollbackException: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: relation “db_notas.tb_central_cep_cd_central_cep_seq” does not exist
Error Code: 0
Internal Exception: org.postgresql.util.PSQLException: ERROR: relation “db_notas.tb_central_cep_cd_central_cep_seq” does not exist
Call: select currval(‘db_dnaso.db_notas.tb_central_cep_cd_central_cep_seq’)
Error Code: 0
Query: ValueReadQuery()
Call: select currval(‘db_dnaso.db_notas.tb_central_cep_cd_central_cep_seq’)
Query: ValueReadQuery()
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:120)
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:60)
at br.com.dnasolution.dao.ConexaoNotas.commitTransacao(ConexaoNotas.java:78)
[/quote]

Vc jah criou o sequence no seu banco oracle?

Outra solução seria, se vc marcou o seu campo no momento da criação da tabela como identity daria para vc mapear da seguinte forma.

@Id
@Column(name="SEU_CAMPO_ID")    
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;

Cara eu criei no meu banco POSTGRES.

[quote=fabioebner]mlkao nada feito. deixei assim oh :

private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @SequenceGenerator(name = "SEQ", sequenceName="tb_central_cep_seq",allocationSize=1) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ") @Column(name = "cd_central_cep", nullable = false) private Integer cdCentralCep;
[/quote]

nesta aparte ai não precisa de todo esse código. É mais simples que aparece, quando eu utilizei a primeira o postgre + top llink deu esse mesmo problema

@Id @GeneratedValue(generator = "nome_da_sequencia", strategy = GenerationType.SEQUENCE) @Column(name = "nomeColuna", nullable = false) private Integer seuCampoId;

Poutz q vacilo nao vi toda a exception e olha no q deu. vi apenas a parte de Oracle TopLink Essentials
Mas no postgres se vc criou o seu campo como serial provavelmente irá rodar da forma como eu postei. Boa sorte

@Id  
@Column(name="SEU_CAMPO_ID")      
@GeneratedValue(strategy=GenerationType.IDENTITY)  
private Integer id;