Obtener el id que asigna Hibernate
Hola,
Inserto unos datos a una tabla con Hibernate y para el id en el archivo de mapeo tengo "generator class="increment" ", todo funciona bien, lo que necesito saber el id que se le asigna para posteriormente añadir más datos a esa misma fila.
¿podrían decirme cómo recuperar ese id?
Saludos
- Inicie sesión o regístrese para enviar comentarios
Cómo insertas?
Si insertas creando una instancia de la clase que se mapea con la entidad de la base de datos, le pones datos y luego haces
entonces simplemente pídele el id a la instancia que acabas de salvar.
Así: SessionFactory
Así:
De todas formas lo hice de otra manera, guardo todo cuando ya tengo todos los datos para insertar, pero me interesa saber como hacer esto porque en el futuro lo voy a necesitar.
Probaré como me indicas en cuanto pueda.
Gracias y saludos
cdr.getId()
Debe haber una propiedad llamada id o algo similar, simplemente despues del sess.save(cdr) puedes hacer cdr.getId() o como se llame la propiedad para obtener el ID que le puso hibernate a tu objeto.
Y como sabs cual es el ID?,
Y como sabs cual es el ID?, pues si usas anotaciones busca en tu POJO la propieddad que tenga la anotacion @Id
y si usas hbm pues la que tnga esta estructura
Ah, y por cierto!
Aguas con <generator> porque puedes tener tus propios indices en Hibernate que no necesariamente coincidan con los de la la base de datos pues puedes asignarle manualmente el ID, lo puedes consultar de un Procedure, o puedes decirle a Hibernate que lo consulte de la tabla (entre otras)... no se (no estoy seguro) si esto pueda generarte problemas al no te devuelve el ID pero checalo y juegale a ver que te resulta.
cachar el id
en el ejemplo de javiher, cuando haces persistente el objeto, hibernate genera un identificador unico si es que se ha definido la estategia de la generacion del id por medio del xml de mapeo o kon anotaciones de jpa, la generacion del id ocurre en la linea:
el método save( object ) retorna el id generado en una instancia a la interfaz serializable, creo que el tipo al cual puede ser casteado es String, Integer, Long....... Para cacharlo podrias hacer lo siguiente.
aplica lo mismo para los demas casos, se hace el cast debido a que lo que se retorna es una instacia de la interfaz Serializable como te comentaba y no propiamente un objeto de esos tipos.