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

9 respostas
S

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

9 Respostas

H

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

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

R

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.

S

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.

D

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.


Se tivesse um tratamento de erro aí, veria que não está persistindo.

S

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

D

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.

R

Oi, boa tarde!

Pegue o retorno:

Serializable idGerado = session.save(obj);

Abraço,

T

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á.

D

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.

Criado 19 de junho de 2012
Ultima resposta 15 de mai. de 2013
Respostas 9
Participantes 6