Recuperar ID pelo Hibernate.

729 views
Skip to first unread message

Bruno

unread,
Jul 8, 2010, 2:48:53 PM7/8/10
to
Olá pessoal,

Qual a melhor forma de recuperar um Id (gerado pelo banco de dados) de um objeto
que acabei de persistir no Banco ?

Atualmente estou fazendo um select max (id) ... pra  pegar o id, mas será que não teria uma forma
melhor de fazer isso ??


Obrigado pela atenção,
--
_________________________
Bruno Santos Dumont
msn: brun...@gmail.com
Brasília - DF, Brasil

Thiago Gonçalo

unread,
Jul 8, 2010, 2:59:20 PM7/8/10
to Hibernate Brasil
Você precisa pegar o último registro de uma tabela?
> msn: bruno....@gmail.com
> Brasília - DF, Brasil

Bruno

unread,
Jul 8, 2010, 3:00:55 PM7/8/10
to hibernat...@googlegroups.com
Não. Preciso pegar o ID do objeto que  acabei de persistir.

2010/7/8 Thiago Gonçalo <thia...@gmail.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Hibernate Brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para hibernat...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para hibernate-bras...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/hibernate-brasil?hl=pt-BR.




--
_________________________
Bruno Santos Dumont
+55 (61) 8147-8005

Lucélio Azevedo

unread,
Jul 8, 2010, 3:28:33 PM7/8/10
to hibernat...@googlegroups.com
olha,

se me lembro direito, depois q vc persiste o objeto do hibernate é atualizado
entao é soh vc chamar o objeto.getId(); (ou qualquer que seja o metodo do seu objeto para pegar o atributo);



--
Cordialmente,

Lucélio Azevedo

Thiago Gonçalo

unread,
Jul 8, 2010, 3:32:42 PM7/8/10
to hibernat...@googlegroups.com

save(obj1)
System.out.println(obj1.id); (imprime a id do objeto que acabou de ser persistido)
return obj1; (aqui você já tem o objeto com a id)

--

Thiago Gonçalo Gomes {
    Analista e Desenvolvedor de Sistemas

Berg Oliveira

unread,
Jul 9, 2010, 9:28:56 AM7/9/10
to hibernat...@googlegroups.com
Só confirmando.
Qdo vc persiste um novo objeto, o hibernate atualiza o objeto com o id persistido.

Abraços
Deus abençoe
Berg Oliveira
----------------------
"Logo a chuva vai passar, e um novo céu se abrirá pra Ti"

Alan Santos

unread,
Jul 14, 2010, 7:37:27 AM7/14/10
to hibernat...@googlegroups.com
Pegar o ultimo registro não é confiável devido a problemas de concorrência. Como já foi dito, após persistir o objeto, este já possui um id.

Bruno Missi Xavier

unread,
Jul 14, 2010, 8:37:12 AM7/14/10
to hibernat...@googlegroups.com
Utilizando o Oracle ou o PostigreSQL eu costumo criar sequences e mandar o hibernate executar as sequences e atribuir o valor ao campo @Id, desta forma:
    @Id
    @SequenceGenerator(name = "SEQEDCALECALECODIGO", sequenceName = "SEQ_EDCALE_CALECODIGO", allocationSize=1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQEDCALECALECODIGO")
    @Basic(optional = false)
    @Column(name = "CALECODIGO")
    private Integer calecodigo;

A sequence SEQ_EDCALE_CALECODIGO deve existir no banco.


Para o caso do Mysql ou outros bancos que não possuam o recurso de sequences, deve fazer assim (nunca precisei utilizar, uso apenas o Oracle):
    @Id
    @Basic(optional = false)
    @Column(name = "CALECODIGO")
    @GenerateValue
    private Integer calecodigo;

Para utilizar a geração de id que sirva tanto para o Oracle quanto para o Mysql voce pode utilizar a estrategia de geração de id automatica, assim:
    @SequenceGenerator(name = "SEQEDCALECALECODIGO", sequenceName = "SEQ_EDCALE_CALECODIGO", allocationSize=1)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQEDCALECALECODIGO")

Com o Mysql conheço a teoria, mas no Oracle é assim mesmo que utilizo.

Qualquer duvida estou a disposição.


--
Atenciosamente,

Bruno Missi Xavier
Consultor Interno de Gestão
Tel/cel: (28) 3521-2001 / (28) 9966-7613
www.dataci.es.gov.br
email: dataci...@cachoeiro.es.gov.br
skype: bruno.missi.xavier


2010/7/14 Alan Santos <alansa...@gmail.com>
Reply all
Reply to author
Forward
0 new messages