ORM createNativeQuery

ORM en algunos casos es muy bueno para el tema de agilizar el desarrollo y mas cuando se trabaja con la especificacion JPA y se implementa con en este caso con hibernate ,
despues se trabaja muy bien con los POJO y los DAO que se crearon y hasta ahi todo muy bien hasta cuando necesitas utilizar algo nativo del motor de base de datos ... para esos casos esta bien utilizar el createNativeQuery() el encargado de enviar un query nativo que lo entienda el motor de bd y envie una respuesta (ya en SQL y no en HQL) hasta ahi muy bien pero muchos se quedan en un ciclo de dudas resolviendo que les retorna esa consulta por NativeQuery ,sencillamente se retorna una lista de objetos o un objeto de tipo Object[] objects .. 
  • Tipos de datos para el cast
 cuando en la tabla de bd los tipos son numericos por lo general en el java se debe catear a BigDecimal 
 y cuando son varchar  se debe castear a un String


public List(Estacion) consultaEstaciones(){

EntityManager em    =  EntityManagerHelper.getEntityManager();
List(Estacion) listaEstaciones =  new ArrayList(Estacion)();

String sql = "SELECT ID_ES,NOMBRE_ES,TIPO_ES,SUBSTR(COD_WMO_ES,3),GRADOS_LATITUD||','||MINUTOS_LATITUD,GRADOS_LONGITUD||','||MINUTOS_LONGITUD,ALTITUD "+
"FROM ESTACIONES EST "+
"INNER JOIN OBJETIVOS OBJ "+
"ON EST.ID_ES = OBJ.ESTACION_ID "+
"WHERE OBJ.RED_ID = 78";

    Query query =  (Query) em.createNativeQuery(sql) ;
    List(Object[])  listaValor  = query.getResultList(); 

   
    for (Object[] objects : listaValor) { 
     System.out.println("-------------------------"); 
     Estacion estacion  =  new Estacion(); 
     estacion.setId((BigDecimal) objects[0]); 
     estacion.setNombre((String) objects[1]); 
     estacion.setTipo((String) objects[2]); 
     estacion.setCodWmo((String) objects[3]); 
     estacion.setLatitud((String) objects[4]); 
     estacion.setLongitud((String) objects[5]); 
     estacion.setAltitud((BigDecimal) objects[6]); 
     listaEstaciones.add(estacion); 

 }  return listaEstaciones; 

}  

Comentarios

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Juan Carlos no sabe como me sirvio este ejemplo, mil gracias, pues pase un dia entero intentando hacer un group by y pasarcelo a un pojo y gracias a usted lo he logrado.

    ResponderEliminar
  3. Hola Juan Carlos, no me quedo claro porque se hizo un casting aquí Query query = (Query) em.createNativeQuery(sql) ;
    talvez lo podrias explicar. Gracias por el ejemplo.

    ResponderEliminar

Publicar un comentario

Entradas populares