Erro com Hibernate + PostGre + auto incremento [RESOLVIDO]

32 respostas
andre_bento

Olá Pessoal.
Já li e reli um monte de tutorias e artigos aqui do fórum mas ainda não encontrei o meu erro.
Bem, é o seguinte, sou novato com o hibernate e estou precisando de ajuda com o autoincremento!

meu BD:

-- Table: clientes

-- DROP TABLE clientes;

CREATE TABLE clientes
(
  nome character varying,
  cpf character varying,
  id bigserial NOT NULL,
  CONSTRAINT clientes_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE clientes OWNER TO postgres;
Minha SEQUENCE:
-- Sequence: clientes_id_seq

-- DROP SEQUENCE clientes_id_seq;

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

E na minha classe estou fazendo annotations:

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.annotations.Entity;

@Entity
@Table(name="clientes")
@SequenceGenerator(name = "clientes_id_seq", sequenceName = "clientes_id_seq")


/**
 * Clientes generated by hbm2java
 */
public class Clientes  implements java.io.Serializable {
    
    private static final long serialVersionUID = 1L;

    @Id
    @Column (name = "id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "clientes_id_seq")
     private long id;

     private String nome;
     private String cpf;
...

Só que não está funcionando...Eu cadastro o primeiro e ele já começa do 0 quando vou cadastrar novamente ele não gera uma nova chave primária e gera o erro de Violação de Primary Key e acusa Could not execut JDBC bath update!
Por favor, me ajudem... já tentei de tudo e não consigo...
Abraço a todos!

32 Respostas

marcos4ft

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “clientes_id_seq”)

no generatioType, ao invés de SEQUENCE, coloque AUTO.

andre_bento

Olá Amigo...
Obirgado pela força...
Ele continua gerando o mesmo erro...
Ae vai o erro completo:

AVISO: SQL Error: 0, SQLState: 23505
18/10/2011 15:02:38 org.hibernate.util.JDBCExceptionReporter logExceptions
GRAVE: ERRO: duplicar valor da chave viola a restrição de unicidade "clientes_pkey"
18/10/2011 15:02:38 org.hibernate.event.def.AbstractFlushingEventListener performExecutions
GRAVE: Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
        at DAO.DAOCliente.inserir(DAOCliente.java:48)
        at testehibernate.Main.main(Main.java:30)
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into public.clientes (nome, cpf, id) values (Anderson, 124835, 0) foi abortada. Chame getNextException para ver a causa.
        at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2537)
        at org.postgresql.core.v3.QueryExecutorImpl$1.handleError(QueryExecutorImpl.java:403)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1328)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:351)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2674)
        at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
        ... 9 more
diogoprosoft

Aqui como eu faço.

@Id    
    @SequenceGenerator(name = "SEQ_CLIENTE",sequenceName = " cliente_seq")
    @GeneratedValue( strategy = GenerationType.AUTO,generator = "SEQ_CLIENTE")
    @Column(name = "id_cliente", unique=true)
	private Integer idCliente;

No seu banco coloquei o id como integer e não serial, assim fica genérico para todos os bancos.

andre_bento

Olá amigo.
Fiz como vc falou veja:

private static final long serialVersionUID = 1L;

    @Id
    @SequenceGenerator(name = "clientes_id_seq",sequenceName = "clientes_id_seq")
    @GeneratedValue( strategy = GenerationType.AUTO,generator = "clientes_id_seq")
    @Column(name = "id", unique=true)
     private long id;

Onde era o seu SEQ_CLIENTE substituí pelo meu clientes_id_seq… correto?
Mas continua gerando o mesmo erro… troquei minha tabela para bigint no banco e também fiz uma nova sequência para ela que ficou idêntica a outra, mas nada… até agora o mesmo erro…
Valeu pela força!!!

andre_bento

Amigos…
Eu reparei uma coisa no corpo do erro:

GRAVE: Could not synchronize database state with session org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
Será que é ajuda?

diogoprosoft

Essa era o seu antigo código

@Entity  
@Table(name="clientes")  
@SequenceGenerator(name = "clientes_id_seq", sequenceName = "clientes_id_seq")  
  
  
/** 
* Clientes generated by hbm2java 
*/  
public class Clientes  implements java.io.Serializable {  
      
    private static final long serialVersionUID = 1L;  
  
    @Id  
    @Column (name = "id")  
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "clientes_id_seq")  
     private long id;  
  
     private String nome;  
     private String cpf;  
...

Retira o annotation acima do nome da classe

@SequenceGenerator(name = "clientes_id_seq", sequenceName = "clientes_id_seq")

Depois deixe o seu último código postado

no banco deixe assim:

CREATE TABLE clientes  
(  
  nome character varying,  
  cpf character varying,  
  id integer NOT NULL,  
  CONSTRAINT clientes_pkey PRIMARY KEY (id)  
)  
WITH (  
  OIDS=FALSE  
);  
ALTER TABLE clientes OWNER TO postgres;

dê preferência em gerar as tebelas pelo hibernate.

andre_bento

Cara, ainda não deu certo…
Como eu faria para criar as tabelas a partir do hibernate?
Me dá esse help que talvez o erro suma…
Brigadão!

diogoprosoft

Cara te passo sim, só não tenho ele aqui agora mais assim que eu chegar em ksa te passo, não lembro de cabeça agora.

andre_bento

Beleza cara, eu estou tentando aqui seguir alguns tutos na net mas tá dose…
O erro continua ainda… talvez com ele gerando as tabelas evite esse tipo de erro.
Obrigado pela força, caso descubra no meu código ae alguma coisa que possa estar gerando o erro me fala ae pessoal!

andre_bento

Amigos…
Continuei tentando aqui mas sem sucesso…
Não consigo corrigir o erro, não sei o que pode estar havendo…
O lance é que parece que minha classe java não se comunica com a sequence criada no postgre, pois tem um campo no post dizendo : Já foi acessada? E lá está marcado como não!
Se precisarem de mais alguma parte do código por favor me falem…
Abraçoss e obrigado pela ajuda!

diogoprosoft

Ta na mão como prometido como gerar tabelas no banco

public static void main(String[] args){
	AnnotationConfiguration cfg = new AnnotationConfiguration();
				
	try{	

            create(cfg.addAnnotatedClass(NomeBean.class));
		         
       }catch(Exception e){
          e.getMessage();
      }
}

	private static void create(AnnotationConfiguration cfg) throws Exception{
		new SchemaExport(cfg).create(true, true);		
	}
fejohann

Amigo, vc setando o codigo a mão grava no banco? pois se não gravar o problema é que vc esta declarando algo errado no java…

Seguinte:
a minha anotação na classe é (em uma classe Marca):

@Entity
@SequenceGenerator(name = "seq_marca", sequenceName = "seq_marca", allocationSize = 1)
public class Marca {
...

A minha anotação no atributo é:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "seq_marca")
private int codigo;
...

e no BD, a seq é :

CREATE SEQUENCE seq_marca
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE seq_per OWNER TO postgres;

lendo seu codigo… uma das poucas diferenças que vejo é o tipo de dado da minha chave primaria…

fejohann

outra coisa que sofri para descobrir foi que estava setando o codigo e implementando o auto incremento…

da erro, óbvio…

posta o codigo da DAO, e o codigo do ação do botão em questão!!!

andre_bento

Olá amigo!
Obrigado pela ajuda!
Cara, se eu seto manualmente o BD funfa legal...
Tipo, eu fui e fui setando manualmente o id... colocando mais um pra não dar pau e ele funciona legal... faz pesquisas e tudo mais...
É só esse lance mesmo...
E tipo, quando eu coloco minha varíavel de banco como int ele não gera a sequence automaticamente... ae eu gerei manual mas foi exatamente a mesma coisa que o outro...
Estive olhando seu exemplo cara, esse seq_marca é o nome da sua sequence no postgre... correto?
Segue o código DAO:

public class DAOCliente {

   private static SessionFactory factory;
     static{
       try{
        factory = new Configuration().configure().buildSessionFactory();
       }
       catch (Exception e ){
        JOptionPane.showMessageDialog(null,"ERRO AO CONECTAR:"+e);
       }

    }

    public static Session getSession (){
        return factory.openSession();
    }


    public void inserir (testehibernate.Clientes c) {
        Session session = getSession();
        Transaction t = session.beginTransaction();
        session.save(c);
        t.commit();
        session.close();
    }
E segue o código de ação, não é um botão, executa direto no main pois é só um teste:
public static void main(String[] args) {
         Clientes c = new Clientes();
      
        try{
        
        c.setNome("Anderson");
        c.setCpf("124835");
        DAOCliente daoCliente = new DAOCliente();
        daoCliente.inserir(c);

Qualquer coisa é só falar pessoal!
Obrigado a todos!

fejohann

amigo, acho que descobri o que pode ser:

CREATE SEQUENCE seq_marca
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE seq_per OWNER TO postgres;

vc tem esse codigo na seq do seu bd… tenta colocar o START EM 10, ou colocar para o proximo valor do id do seu banco…
pelo erro, vc esta tentando duplicar uma chave… e esta iniciando em 1, e pelo que relatou ja tem mais de um registro…
testa ai!!!

andre_bento

Olá amigo!
Cara, diz isso que vc falou mas ainda assim não funcionou…
Mas agora ele chamou a sequence…porque no campo foi chamada? do postgre ele agora mudou para sim…
Mas coloquei o start em 10 e nada…
Tentei também zerar a tabela pra ver se ia mas não deu nada também… mesmo colocando o start em 10 quando executei ele parece que chamou a sequence mas começou a chave com 0…
Heeeeelp!!!
O que vc acha cara?

fejohann

posta ai como esta o seu codigo agora… classe, dao, tabela do bd, sequence…

to com tempo agr!!!

andre_bento

Vamo lá:
Classe:

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

import org.hibernate.annotations.Entity;


@Entity
@SequenceGenerator(name = "clientes_id_seq", sequenceName = "clientes_id_seq", allocationSize = 1)

/**
 * Clientes generated by hbm2java
 */
public class Clientes  implements java.io.Serializable {
    
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "clientes_id_seq")
    private long id;

     private String nome;
     private String cpf;

    public Clientes() {
    }

	
    public Clientes(long id) {
        this.id = id;
    }
    public Clientes(long id, String nome, String cpf) {
       this.id = id;
       this.nome = nome;
       this.cpf = cpf;
    }
   
    public long getId() {
        return this.id;
    }
    
    public void setId(long id) {
        this.id = id;
    }
    public String getNome() {
        return this.nome;
    }
    
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getCpf() {
        return this.cpf;
    }
    
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }




}

DAO:

import java.util.List;
import javax.swing.JOptionPane;
import org.hibernate.Criteria;
import org.hibernate.Query;


import testehibernate.Clientes;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Andre
 */
public class DAOCliente {

   private static SessionFactory factory;
     static{
       try{
        factory = new Configuration().configure().buildSessionFactory();
       }
       catch (Exception e ){
        JOptionPane.showMessageDialog(null,"ERRO AO CONECTAR:"+e);
       }

    }

    public static Session getSession (){
        return factory.openSession();
    }


    public void inserir (testehibernate.Clientes c) {
        Session session = getSession();
        Transaction t = session.beginTransaction();
        session.save(c);
        t.commit();
        session.close();
    }

    public void delete (Clientes c){
        Session session = factory.openSession();
        session.delete(c);
        session.flush();
        session.close();
    }

   

    public Clientes getOne(String pk) throws Exception{
        Session session = getSession();
        Clientes c = new Clientes();
        JOptionPane.showMessageDialog(null,pk);
        Transaction t = session.beginTransaction();
        Criteria select = session.createCriteria(Clientes.class);
        select.add(
               Restrictions.like("id",pk)
                   
                );
       List<Clientes> l = select.list();
       c.setNome(l.get(0).getNome());
       c.setCpf(l.get(0).getCpf());
       c.setId(l.get(0).getId());



        return c;
    }
Tabela BD:
-- Table: clientes

-- DROP TABLE clientes;

CREATE TABLE clientes
(
  nome character varying,
  cpf character varying,
  id bigserial NOT NULL,
  CONSTRAINT clientes_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE clientes OWNER TO postgres;
Sequence:
-- Sequence: clientes_id_seq

-- DROP SEQUENCE clientes_id_seq;

CREATE SEQUENCE clientes_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE clientes_id_seq OWNER TO postgres;
fejohann

Amigo, na tua classe, tenta fazer o seguinte:

@Entity
@SequenceGenerator(name = "clientes_id_seq", sequenceName = "clientes_id_seq", allocationSize = 1)

public class Clientes {
    

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "clientes_id_seq")
    private long id;
    private String nome;
    private String cpf;


}

gera os acessadores e tenta executar,

testa ai!

andre_bento

Olá amigo…fiz como vc falou e o erro persiste :frowning:

fejohann

cara, tenta além disso mudar a tua chave primaria para integer, e na classe para int…

andre_bento

Amigão… vou tentar isso entao…
Mas teria que ser bigint ou int normal cara?
Vou ter que criar a sequence na mão lá depois também…
Agora estou indo pro horário de almoço cara… volto daqui a pouco e se der certo eu te falo aqui… se não te falo também …rsrsrs
Muito obrigado peloa força amigão!
Abraços

fejohann

normal…
se não me engano um int vai até
2 147 483 647…

ou seja, é muito registro!!!

fejohann

outra coisa, no seu DAO … inserir … pq esta testehibernate.Clientes c ??

tenta deixar só Clientes c

andre_bento

Olá amigo!
Cara, ainda não consegui…já tentei criar a tabela a partir do hibernate e nada…
Eu tento mudar no BD a variável ID para int mas sempre que coloco integer na variável e seto ela como PK ela vai para serial…
Ae na hora de executar ele dá erro de cast e diz que não consegue converter esse tipo long para integer.
Caramba… não sei mais o que pode ser isso galera… por favor… me ajuuuudem!!!

andre_bento

Pessoal…
Alguém poderia me passar um code de uma classe completa aqui e também o BD para que eu faça um teste pra ver se funfa?
A classe… e o BD…
Não consigo resolver esse problema de jeito nenhum aqui!

andre_bento

Pessoal, é o seguinte…
PArece mesmo que o hibernate não consegue “chamar” a sequence…Porque testei a sequence direto no banco e ela tá funcionando legal… inseri alguns records direto no banco e ele gerou direitim os ids do pessoal…
O problema são com os annotatios do hibernate, não sei se estão todos certos mas parece que eles não conseguem se comunicar com a sequence no BD!!
Por favor, me ajudem, pois não to conseguindo resolver isso de jeito nenhum pessoal!!!
HEEEEEEEEEEEEEELPPPPPPPPPPPPP

fejohann

Amigo, ai vai uma classe completa… é de Administrador…

DAO

package DAO;

import java.util.List;

import org.hibernate.Session;
import model.Administrador;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Transaction;
import util.HibernateUtil;

public class AdministradorDAO {
 
    private Session session;

    public AdministradorDAO()
    {
        session = HibernateUtil.getSession();
    }

    public void inserir(Administrador X)
    {
        Transaction t = session.beginTransaction();
        session.save(X);
        t.commit();
    }

    public void alterar(Administrador X)
    {
        Transaction t = session.beginTransaction();
        session.update(X);
        t.commit();
    }

    public void excluir(Administrador X)
    {
        Transaction t = session.beginTransaction();
        session.delete(X);
        t.commit();
    }

    public List<Administrador> listar()
    {
        Criteria select = session.createCriteria(Administrador.class);
        return select.list();
    }

    public Administrador buscar(Administrador X)
    {
        return (Administrador)session.load(Administrador.class, X.getAdm_cod());
    }
    
    public boolean login(Administrador a) {
        Query q = session.createQuery("from Administrador where adm_cpf = :cpf and adm_senha = :senha");
        q.setParameter("cpf", a.getAdm_cpf());
        q.setParameter("senha", a.getAdm_senha());
        
        List<Administrador> lista = q.list();
        if(lista.size() > 0){
            //System.out.print("verdadeiro");
            return true;
        }
        //System.out.print("falso");
        return false;
        
    }
}

CLASSE

package model;

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

@Entity
@SequenceGenerator(name = "seq_Adm",
sequenceName = "seq_Adm",
allocationSize = 1)

public class Administrador {
        
        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE,
        generator = "seq_Adm")
	private int adm_cod;
	 
	private String adm_nome;
	 
	private String adm_senha;
	 
	private Long adm_cpf;
	 
	private String adm_mail;
	 
	private int adm_fone;

    public void setAdm_cod(int adm_cod) {
        this.adm_cod = adm_cod;
    }

    public int getAdm_cod() {
        return adm_cod;
    }

    public void setAdm_nome(String adm_nome) {
        this.adm_nome = adm_nome;
    }

    public String getAdm_nome() {
        return adm_nome;
    }

    public void setAdm_senha(String adm_senha) {
        this.adm_senha = adm_senha;
    }

    public String getAdm_senha() {
        return adm_senha;
    }

    public void setAdm_mail(String adm_mail) {
        this.adm_mail = adm_mail;
    }

    public String getAdm_mail() {
        return adm_mail;
    }

    public void setAdm_cpf(Long adm_cpf) {
        this.adm_cpf = adm_cpf;
    }

    public long getAdm_cpf() {
        return adm_cpf;
    }

    public void setAdm_fone(int adm_fone) {
        this.adm_fone = adm_fone;
    }

    public int getAdm_fone() {
        return adm_fone;
    }
}

BOTÃO QUE GRAVA!!!

private void jButton1_actionPerformed(ActionEvent e) {
    //Objetos
        AdministradorDAO dao = new AdministradorDAO();
        Administrador administrador = new Administrador();
        
    //Atribuição
        //administrador.setAdm_cod(Integer.parseInt(jTextField1.getText()));
        administrador.setAdm_nome(JTF_nome.getText());
        administrador.setAdm_cpf(Long.parseLong(JTF_cpf.getText()));
        administrador.setAdm_fone(Integer.parseInt(JTF_fone.getText()));
        administrador.setAdm_mail(JTF_mail.getText());
        administrador.setAdm_senha(JTF_Senha.getText());
        
    //Gravação
        if(new Administrador().validaCpf(JTF_cpf.getText()) == true){
        
        dao.inserir(administrador);
        Listar();}
        else{
            JOptionPane.showMessageDialog(null,"CPF incorreto, verifique e tente novamente!!!");
        }
        
    }

SQL PRA TABLE ADMIN

CREATE TABLE administrador
(
  adm_cod integer NOT NULL,
  adm_nome character(60),
  adm_senha character(10),
  adm_mail character(10),
  adm_cpf bigint,
  adm_fone integer,
  CONSTRAINT pk_administrador PRIMARY KEY (adm_cod)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE administrador OWNER TO postgres;

SQL SEQUENCIA

CREATE SEQUENCE seq_adm
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 7
  CACHE 1;
ALTER TABLE seq_adm OWNER TO postgres;

tomara que funcione!

andre_bento

Olá amigo!
Cara, desta vez parece que vai funfar, ele gerou a sequence certim lá no banco e tudo mais… só que agora ele tá me dando outro erro:
Essa é a parte final do erro:

INFO: Not binding factory to JNDI, no JNDI name configured
20/10/2011 09:30:39 org.hibernate.util.JDBCExceptionReporter logExceptions
AVISO: SQL Error: 0, SQLState: 42P01
20/10/2011 09:30:39 org.hibernate.util.JDBCExceptionReporter logExceptions
GRAVE: ERRO: relação "hibernate_sequence" não existe

E ele dá essa mensagem: Could not get the next sequence value!
Por favor, me ajuuuuudem… parece que agora vai!!!

fejohann

Cara, vc mudou o nome da seq em algum lugar?
parece q ele ta procurando por esse hibernate_sequence…

se mudou verifique se esta exatamente igual!

andre_bento

CONSEGUUUUUUUUUUUUUIIIIIIIIIIIIIIIIIIIIII!!!
Amigo, consegui finalmente resolver o erro!!!
Esse último é porque descobri que isso acontece quando o hibernate não consegue achar uma sequence e exibe o nome default hibernate_sequence…
Ae tem que mapear ela no arquivo hbm…

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="modelo.Clientes" table="clientes" schema="public">
    <id name="id" type="integer">
            <column name="id" />
            <generator class="sequence">
                <param name="sequence">clientes_id_seq</param>
            </generator>
        </id>
        <property name="nome" type="string">
            <column name="nome" />
        </property>
        
        <property name="cpf" type="string">
            <column name="cpf" />
        </property>
        </class>
</hibernate-mapping>

Feito isso, usei o código que vc me passou e funcionou legal cara!
Fiz um teste criando outro bd e tudo mais em outra classe e funfou legal agora!!
Como pode ser que apareçam pessou com o mesmo erro… lá vai o code!!!

DAO:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DAO;

import java.util.List;
import javax.swing.JOptionPane;
import org.hibernate.Criteria;
import org.hibernate.Query;

import modelo.Clientes;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;


/**
 *
 * @author Andre
 */
public class DAOClientes {

   private static SessionFactory factory;
     static{
       try{
        factory = new Configuration().configure().buildSessionFactory();
       }
       catch (Exception e ){
        JOptionPane.showMessageDialog(null,"ERRO AO CONECTAR:"+e);
       }

    }

    public static Session getSession (){
        return factory.openSession();
    }


    public void inserir (Clientes c) {
        Session session = getSession();
        Transaction t = session.beginTransaction();
        session.save(c);
        JOptionPane.showMessageDialog(null,c.getId());
        t.commit();
        session.close();
    }

    public void delete (Clientes c){
        Session session = factory.openSession();
        session.delete(c);
        session.flush();
        session.close();
    }



    public Clientes getOne(String pk) throws Exception{
        Session session = getSession();
        Clientes c = new Clientes();
        JOptionPane.showMessageDialog(null,pk);
        Transaction t = session.beginTransaction();
        Criteria select = session.createCriteria(Clientes.class);
        select.add(
               Restrictions.like("id",pk)

                );
       List<Clientes> l = select.list();
       c.setNome(l.get(0).getNome());
       c.setCpf(l.get(0).getCpf());
       //c.setId(Integer.parseInt(l.get(0).getId()));



        return c;
    }
  


}

Classe:

package modelo;
// Generated 14/10/2011 16:54:34 by Hibernate Tools 3.2.1.GA


import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import org.hibernate.annotations.Entity;





/**
 * Clientes generated by hbm2java
 */
//na compo name vc colocar o nome da sequencia que vc for usar dentro da classe... no nome sequenceName é o nome da sequencia no BANCO
@Entity
@SequenceGenerator(name = "clientes_id_seq", sequenceName = "clientes_id_seq")
public class Clientes  implements java.io.Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "clientes_id_seq")
    private Integer id;
    private String nome;
    private String cpf;




    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
    public String getNome() {
        return this.nome;
    }

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

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




}

Cara, muuuuuuuuuuuuuito obrigado a vc amigo fejohann e a todos os amigos do fórum!!!
Valeu pessoal…
Um forte abraço!!

fejohann

Aeeee…

Nada não cara… o bom daqui (GUJ) é que você “ensina e aprende” o tempo todo…

Flw

precisando… Todo mundo ta ai pra ajuda!!!

Criado 18 de outubro de 2011
Ultima resposta 20 de out. de 2011
Respostas 32
Participantes 4