Como pegar o ID de uma entity que acabei de gravar com Hibernate?

Estou usando hibernate com postgres, para gerar os IDs uso sequences, quero saber como faço para pegar o id do acabei de persistir?

O próprio Hibernate já não está fazendo isso?

Após persistir, veja se o ID não foi preenchido.

Como o jakefrog disse, é automático por parte do Hibernate.
Depois de persistir, veja que seu objeto passara a ter seu atributo ID preenchido com o ID gerado na tabela do banco de dados.

Na action crio uma instância da DAO e chamo esse método para salvar:

public void salvar(Funcionario funcionario){ Session session = HibernateUtil.getSession(); Transaction tr = session.beginTransaction(); session.save(funcionario); tr.commit(); return; }

Depois que passa por esse método, tento recuperar o ID no método da action mas está vazio, só contêm as informações que coloquei no objeto que seriam persistidas.

[quote=Shatemui]Na action crio uma instância da DAO e chamo esse método para salvar:

public void salvar(Funcionario funcionario){ Session session = HibernateUtil.getSession(); Transaction tr = session.beginTransaction(); session.save(funcionario); tr.commit(); return; }

Depois que passa por esse método, tento recuperar o ID no método da action mas está vazio, só contêm as informações que coloquei no objeto que seriam persistidas.[/quote]
Se tivesse um tratamento de erro aí, veria que não está persistindo.

Vlw, ainda estou aprendendo, cometo as vezes essas furadas.

Sem problemas.
Quando você vai realizar algo que não tem certeza que dará certo, deve colocar este trecho de código dentro de um try/catch ou, se preferir, colocar um throws no método, visando capturar e tratar situações em que o fluxo não anda conforme esperado.
Ao persistir uma entidade, o hibernate já obtem/gera um identificador para a mesma. Se isto não correu, é por que houve algo errado na execução da persistência.

Oi, boa tarde!

Pegue o retorno:

Serializable idGerado = session.save(obj);

Abraço,

Boa tarde galera,

seguindo este post estou com um problema, não consigo recuperar o objeto ou o id do objeto após o session.save().

Por favor veja o código abaixo:

No GenericDao

public Serializable saveWithObjectIdReturn(Serializable pojo) {        
        Object toReturn = null;
        try {
            session = getSession();
            tx = session.beginTransaction();            
            toReturn = session.save(pojo); 
            tx.commit();            
        } catch (HibernateException hbe) {
            if (tx != null) {
                tx.rollback();
            }

        } finally {
            if (session != null && session.isOpen()) {
                session.close();
                System.out.println("Fechou Session  no generic_dao");
            }
        }
        return (Serializable) toReturn;
    }

no CompraDAO:

public Compra saveCompraWithReturn(Compra compra){
        Compra c;
        c = (Compra) saveWithObjectIdReturn(compra);
        return c;
    }

no CompraBean:

this.compra = new Compra(selectedFornecedor, dataCompra, dataPagamento, valorTotalCompra);
this.compra = compraDAO.saveCompraWithReturn(this.compra);

if(compra == null){
                System.out.println("Nulllooooooo");
            }else{
                System.out.println("Id: "+compra.getIdcompra());
            }

O interessante é que está imprimindo: Nulllooooooo
e logicamente dando erro na inserção pois preciso do id gerado pelo banco.

Alguém pode me ajudar?

Agradeço desde já.

Resolvi investigar e vi que no javadoc do método save, conforme consta url=http://docs.jboss.org/hibernate/orm/4.3/javadocs/]aqui[/url], está escrito:

The generated identifier não é o objeto que você está salvando, logo, esta linha

 toReturn = session.save(pojo);

Pode ser a causa dos teus problemas.