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

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

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 sesion.save(instancia) entonces simplemente pídele el id a la instancia que acabas de salvar.

Imagen de javiher

Así:  SessionFactory

Así:

 SessionFactory sessFact = new AnnotationConfiguration().configure().buildSessionFactory();
            sess = sessFact.openSession();
            tran = sess.beginTransaction();
            DetalleLlamadas cdr = new DetalleLlamadas();
            cdr.setOrigen(origen);
            cdr.setDestino(destino);
            cdr.setInicio(inicio);
            cdr.setFin(fin);
            cdr.setCanal(canalOrigen);
            cdr.setCanalDestino(canalDestino);
            cdr.setContextoDestino(contextoDestino);
            cdr.setLastapp(ultimaApp);
            cdr.setClid(clid);
            cdr.setDisposicion(disposicion);
            cdr.setTitulo(titulo);
            cdr.setComentarios(comentario);
            cdr.setCalle(calle);
            cdr.setNumCalle(numcalle);
           
            sess.save(cdr);
            tran.commit();
            sess.close();

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

Imagen de ezamudio

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 <id name="" type="">

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.

Imagen de sock_osg

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:

sess.save(cdr);

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.

Long idGenerado = ( Long )sess.save( cdr );

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.