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 ..
y cuando son varchar se debe castear a un String
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
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; }
Este comentario ha sido eliminado por el autor.
ResponderEliminarJuan 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.
ResponderEliminarHola Juan Carlos, no me quedo claro porque se hizo un casting aquí Query query = (Query) em.createNativeQuery(sql) ;
ResponderEliminartalvez lo podrias explicar. Gracias por el ejemplo.