Obter chave gerado no auto increment com JPA

2 respostas
renatocustodio

Olá pessoal, tenha uma classe com o Id definido da seguinte forma:

...
    @Id 
    @GenericGenerator(name="pk", strategy="increment")  
    @GeneratedValue(generator="pk")  
    @Column(name="TIPPES_CODIGO")
    @Rotulo(valor="Código")
    private int id;
...

Bom, ele funciona muito bem. Gera valores para a chave primária, etc. Mas eu gostaria de saber se existe como eu obter o valor da chave primária que foi gerada. Utilizando esse autoIncrement pelo que me parece ele apenas da um select max + 1. Pelo menos é assim que funciona o nativo do Hibernate. Mas dessa forma aí ele não seta o valor no meu objeto.

Ou seja, eu mando salvar. No banco vai estar gerado o valor da chave certinho como deveria, mas quando eu mostro meu objeto na view, o código está zerado.

No caso estou utilizando JPA com Hibernate. Para persistir uso o método merge().

Um detalhe é que usando os métodos nativos do hibernate com a session dele, o valor da chave é setada normalmente dentro do meu objeto. Para resolver temporariamente criei um método que obtem o maior + 1 id da tabela, e uso momentos antes de salvar, mas não me parece uma solução muito elegante, até mesmo por problemas de concorrência, que aparentemente já foi tratado dentro do método do hibernate.

Alguma luz?

2 Respostas

R

Cara blz ???

Seguinte tive o mesmo problema que vc e resolvi da seguinte forma.

Eu utilizo o persist do entityManager para cadastrar meus dados. E ele pro padrão adiciona o id dentro do proprio obj persistido ex:

public class Cliente {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String nome;
private String email
//... Getters and setters
}

Cliente c = new Cliente();
c.setNome("xpto");
c.setEmail("[email removido]");

em.persist(c);

System.out.println(c.getId());

O persiste automaticamente adicionou o id criado dentro do proprio obj persistido.

blz ??

[]'s

Rodrigo

renatocustodio

Valeu cara, isso resolveu meu problema. Obrigado…

Criado 21 de maio de 2008
Ultima resposta 22 de mai. de 2008
Respostas 2
Participantes 2