[SOLUCIONADO] Armar consulta sql en una EntityClass de un WS

Iniciado por Cronos, Marzo 24, 2015, 12:36:29 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Marzo 24, 2015, 12:36:29 PM Ultima modificación: Marzo 24, 2015, 04:01:12 PM por Gabriela
Buenos dias tengo la siguiente duda, estoy trabajando en un WS y quiero armar una query personalizada para que me arroje una lista que necesito. Al no tener experiencia en este tema me salen muchos errores, me gustaría ver si me pueden dar una mano.

Este es mi codigo normal:
Direcciones.java aca esta el query armado
Código: text

@NamedQuery(name = "Direcciones.findByNombre", query = "SELECT d FROM Direcciones d WHERE d.nombre LIKE :nombre"),


Código: text

@GET
    @Override
    @Path("nombre/{nombre}")
    @Produces({"application/json"})
    public List<Direcciones> findAll(@PathParam("nombre") String nombre) {
        return super.findAll(nombre);
    }


Código: text

public List<T> findAll(String nombre) {
        EntityManager em = getEntityManager();
        Query query = em.createNamedQuery("Direcciones.findByNombre");
        query.setParameter("nombre", "%"+nombre+"%");
        return query.getResultList();
    }


Ese codigo es sencillo, simplemente hace un query que busca en la columna nombre los campos que coincidan con el "nombre" seleccionado.
Yo lo que quiero hacer es una consulta que al ingresar el nombre me devuelva una lista ordenada por distancia de estos nombres segun si ubicacion, tengo la consulta SQL echa pero nose implementarla en el ws. La consulta es la siguiente:

Código: text

SELECT *, (6371 * ACOS(SIN(RADIANS(latitud)) * SIN(RADIANS(40.72476060304879))+ COS(RADIANS(longuitud - -73.99332158267498)) * COS(RADIANS(latitud))* COS(RADIANS(40.72476060304879)))) AS distance
FROM DIRECCIONES
WHERE nombre LIKE "%nombre%"
ORDER BY distance ASC
LIMIT 15;


Ya probe esa consulta y funciona de maravillas, pero al tratar de implementarla no funciona ni de milagro y es porque nose como implementarla bien. Si alguien tiene experiencia y/o conocimientos del tema seria de mucha ayuda.
Desde ya muchas gracias por leer.
Saludos,, Cronos.-

Solucionado! Cambie Query query = em.createNamedQuery("Direcciones.findByNombre"); por Query query = em.createNativeQuery("Query SQL");
Fue muy sencillo, use un query tradicional y funciono.
Saludos,, Cronos.-