Sto cercando un modo intelligente e facilmente leggibile per ottenere l'identità di un'entità persistente utilizzando JPA
. L'ID è un Integer
.Come ottenere l'ID dell'ultima entità persistente utilizzando JPA
Si potrebbe pensare delle seguenti soluzioni:
- Senza utilizzare
GeneratedValue
strategia. Ciò richiede la ricerca di un id libero prima di persistere, quindi di inserirlo nell'entità da perseguire: ingombrante, ma funziona. - Con una strategia
GeneratedValue
. Il provider di persistenza si prenderà cura della generazione di ID. Questo sembra più intelligente, ma come ottenere l'ID?
Vedere sotto per soluzione 2
MyEntity en = new MyEntity();
en.setName("My name");
em.persist(en);
System.out.println(en.getId());
Questo stampa un id nulla!
Qualche suggerimento? Sto usando MySql, EclipseLink, ma ho bisogno di una soluzione portatile.
@JB Nizet, come posso ottenere id prima 'persistono () 'metodo? Non vedo l'ora perché vorrei cambiare il formato ID personalizzato? – CycDemo
@CycDemo: non puoi, a meno che tu non lo generi da solo. –
@JBNizet Dove è la fonte dell'istruzione "persist non è garantito generare l'ID"? In JPS Spec (JSR) ho letto le seguenti due dichiarazioni (capitolo 3.2): - Un'istanza entità gestita è un'istanza con un'identità persistente - La semantica dell'operazione persist, applicata a un'entità X è la seguente: Se X è una nuova entità, diventa gestita. ... * Se interpreto quella parola per parola, direi che la specifica richiede che l'Id sia impostato dopo aver chiamato persist() *. Questo è anche il comportamento di Hibernate. – jbandi