Existe algum comando em JPA que eu possa recuperar o que acabei de gravar???
Eu tenho uma tabela onde o numero ID é gerado automaticamente, então eu não sei qual número vai ser gerado, eu preciso recuperar esse ID gerado para fazer outra tarefa… Porém, se eu mandar pegar o último registro gravado pode não ser a opção mais inteligente, pois mais pessoas utilizarão o programa, vai que 2 pessoas estão gravando ao mesmo tempo, posso recuperar o da outra pessoa, existe uma forma direta???
Quando um atributo é gerado automaticamente, ele é atribuito ao objeto logo após ser persistido, então você pode simplesmente fazer isso:
Cliente cliente = new Cliente();
cliente.setNome("Jair");
cliente.setCidade("Belo Horizonte");
entityManager.persist(cliente);
long id = cliente.getId();
V
vitorkgbPJ
Está correto disso dei o comando mas não recuperou deu NullPointerException
e retornou o código certo do processador, que eu havia atribuído mais acima
J
jaireltonPJ
Então tambem não faz sentido que dê NullPointerException ao chamar cpu.getId(), a não ser que esse getId() retorne um Long e não long, ou que tenha algum codigo que possa dar NullPointerException dentro dele…
Posta o codigo do getId().
J
jaireltonPJ
Ahh, tente dar um flush() tambem, antes de chamar o getId().
Realmente não retorna um Long, mas um Integer, desculpe, mas mesmo asism o problema persiste no caso de não retornar nada… não dá mais exceção, ele retorna null, fiz direto
tem certeza que quando se faz o persist ele atualiza no objeto?? não tem q dá outro comando não??, um merge, ou um outro
J
jaireltonPJ
Tente:
V
vitorkgbPJ
Desculpe tem no top link tb… fiz algo errado aqui deixa eu ajeitar
V
vitorkgbPJ
Quando dou o refresh dá erro na linha do refresh
javax.persistence.EntityNotFoundException: Entity no longer exists in the database: modelo.Cpu[id=null].
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.refresh(EntityManagerImpl.java:393)
kra quando eu uso o Hibernate com MySQL ele popula o id dependendo da maneira q vc mapeou o hbm. Tipo se mapear o generator como assigned não vai popular automanticamete, mas se vc mapear com native ai sim ele popula automaticamente. Se ainda tiver duvidas posta ai novamente.
Esqueleto.
J
jaireltonPJ
Para “assigned” realmente não atribui pois como o proprio nome diz, é um atributo “pré-atributo”, mas pra todas as outras opções teoricamente deveria atribuir automaticamente, o problema é saber como o toplink trata isso, no meu modo de ver isso que foi feito deveria funcionar, só não descobri o motivo de não estar funcionando ainda.
R
rodrigobrazPJ
eu uso JPA toplink e consigo recuperar o registro fazendo da seguinte forma:
após o refresh, meu objeto recebe o Id q foi gerado automaticamente no mysql
E
esqueletoPJ
Kra eu nunca trabalhei com o TopLink mas no hibernate ele popula automaticamente o id nem precisa do refresh. no Hibernate funciona assim
session.beginTransaction();session.save(cliente);session.getTransaction().commit();System.out.println("Id do cliente q acabei de salvar…: "+cliente.getId());
resultado no console
Id do cliente q acabei de salvar…: 6
Espero ter ajudado
A
anonimoPJ
Seu Id está “anotado” ou mapeado como AutoGenerated?
Você disse que está salvando normalmente, já verificou no banco de dados como estão os registros, especialmente os Ids?
Qual o tipo de dados está definido na tabela do banco, e qual tipo está representado na classe Java?
:joia: