criterios opcionales filtros de primavera JPA en el método de consulta

mslowiak:

Quiero filtrar los datos de una base de datos con unos criterios (asumamos que es 8). Y por debajo de consulta método de hacer esto de una manera buena. Pero, de hecho, esta criterios que se pasan al método de consulta pueden ser nulos (esto significa que no hay que aplicar para consulta de selección).

¿Cómo debo manejar esta situación? Realmente no quiero hacer n-métodos para manejar cada caso - no es una buena manera.

@Query("SELECT NEW api.model.GeneralAnnouncementInfo(" +
        "an.id, an.title, po.price, SUBSTRING(an.description, 1, 100), an.provider, an.creationDate, an.url, l.lessorType, concat(loc.city, ' ', loc.district)) " +
        "FROM Announcement as an " +
        "LEFT JOIN an.priceOffer as po " +
        "LEFT JOIN an.lessor as l " +
        "LEFT JOIN an.location as loc " +
        "LEFT JOIN an.propertyData as pd " +
        "WHERE l.lessorType = (:lessor) " +
        "AND pd.roomNumber = (:rooms) " +
        "AND pd.bathroomNumber = (:baths) " +
        "AND pd.parkingAvailability = (:parking) " +
        "AND pd.isSmokingAllowed = (:smokers) " +
        "AND pd.isPetFriendly = (:pets) " +
        "AND pd.area = (:realPrice) " +
        "AND po.price = (:area) ")
Page<GeneralAnnouncementInfo> getAnnouncementsBySearchCriteria(Pageable pageable, 
                                                               String lessor,
                                                               String rooms,
                                                               String baths,
                                                               String parking,
                                                               String smokers,
                                                               String pets,
                                                               String realPrice,
                                                               String area
);
Marco R. :

Yo recomendaría conmutación a la API JPA Criterios . Se le dará la flexibilidad extra que está buscando (y que parece estar JPQL gasto excesivo para su caso). Usted puede construir sus consultas mediante programación sin ningún tipo de limitaciones y lo mejor es que se compilan; lo que significa que no hay errores tipográficos sobrevivirán (que son una pesadilla para realizar un seguimiento en las consultas JPQL). Adicionalmente es posible que desee utilizar las clases del metamodelo de la APP ; que se suman más robustez a sus consultas. Al final, su método de depósito sería algo como esto:

private EntityManager em;

private Page<GeneralAnnouncementInfo> getAnnouncementsBySearchCriteria(QueryParameters qParams) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<SampleEntity> criteria = cb.createQuery(GeneralAnnouncementInfo.class);
    Root<GeneralAnnouncementInfo> root = criteria.from(GeneralAnnouncementInfo.class);

    // Programmatically build query details (conditions, joins, aggregations, translation, etc) 
    // ...
    // ...
    // ...


    return em.createQuery(criteria).getResultList();
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=207613&siteId=1
Recomendado
Clasificación