Как получить список объектов для каждого элемента подсписка в JPQL? - PullRequest
0 голосов
/ 07 мая 2020

Я написал следующий запрос

@Query(value = "SELECT DISTINCT cont FROM Contact cont" +
            " LEFT JOIN FETCH cont.customer cust" +
            " LEFT JOIN FETCH cont.customerLocations custLoc" +
            " WHERE " +
            "cont.deleted = FALSE AND " +
            "custLoc.deleted = FALSE AND " +
            "((cont.name LIKE %:searchQuery%) OR " +
            "(cont.title LIKE %:searchQuery%) OR " +
            "(cont.phone LIKE %:searchQuery%) OR " +
            "(cont.email LIKE %:searchQuery%) OR " +
            "(cust.name LIKE %:searchQuery%)) AND " +
            "(:customerId IS NULL OR cust.id = :customerId) AND " +
            "(:contactId IS NULL OR cont.id = :contactId) AND " +
            "(:locationId IS NULL OR custLoc.id = :locationId) AND " +
            "((:primary = FALSE AND (cont.id <> custLoc.primaryContactId OR custLoc.primaryContactId IS NULL)) " +
            "OR (:primary = TRUE AND custLoc.primaryContactId IS NOT NULL AND cont.id = custLoc.primaryContactId) " +
            "OR (:primary = NULL))",
            countQuery = "SELECT COUNT(DISTINCT cont) FROM Contact cont" +
                    " LEFT JOIN cont.customer cust" +
                    " LEFT JOIN cont.customerLocations custLoc" +
                    " WHERE " +
                    "cont.deleted = FALSE AND " +
                    "custLoc.deleted = FALSE AND " +
                    "((cont.name LIKE %:searchQuery%) OR " +
                    "(cont.title LIKE %:searchQuery%) OR " +
                    "(cont.phone LIKE %:searchQuery%) OR " +
                    "(cont.email LIKE %:searchQuery%) OR " +
                    "(cust.name LIKE %:searchQuery%)) AND " +
                    "(:customerId IS NULL OR cust.id = :customerId) AND " +
                    "(:contactId IS NULL OR cont.id = :contactId) AND " +
                    "(:locationId IS NULL OR custLoc.id = :locationId) AND " +
                    "((:primary = FALSE AND (cont.id <> custLoc.primaryContactId OR custLoc.primaryContactId IS NULL)) " +
                    "OR (:primary = TRUE AND custLoc.primaryContactId IS NOT NULL AND cont.id = custLoc.primaryContactId) " +
                    "OR (:primary = NULL))")
    Page<Contact> findByParamsNSD(@Param("searchQuery") String searchQuery,
                                  @Param("primary") Boolean primary,
                                  @Param("customerId") Long customerId,
                                  @Param("contactId") Long contactId,
                                  @Param("locationId") Long locationId,
                                  Pageable pageable);

В результате я получил список контактов, в котором каждый контакт содержит список CustomerLocations (изображение ниже). Но мне нужен список контактов, в которых нужно дублировать контакт для каждого CustomerLocation из списка. Как я мог это получить? Текущий результат

...