Как мы можем реализовать пользовательские методы поиска в CrudRepository, чтобы получать только определенные столбцы из базы данных? - PullRequest
0 голосов
/ 03 октября 2019

Мне нужно выполнить SQL-запрос в моем репозитории:

public interface UserRequestResponseRepository extends JpaRepository<UserRequestResponse, Integer> {
    //public static final String FIND_QUERY = "select user.u_httpstatus ,user.u_queryparam from UserRequestResponse user";
    public static final String FIND_QUERY = 
            "select new com.abc.datacollection.entity.UserRequestResponse(user.u_httpstatus ,user.u_queryparam) from UserRequestResponse user";
    @Query(value = FIND_QUERY)
    public List<UserProjection> getAllRequestResponseRecords();
}

, где UserProjection - это определенная мной проекция:

public interface UserProjection {
    String getU_httpstatus();
    String getU_queryparam();
}

В классе userRequestResponse больше полей, чем в u_httpstatus иu_queryparam, но мне нужны только эти 2 поля в моем ответе.

public @ResponseBody List<UserRequestResponse> getAllRequestResponseRecords() {
    return userRequestResponseRepository.findAll() ;
}

как мне изменить приведенный выше код (findAll ()), чтобы получать результаты из моего пользовательского запроса, а не результаты из стандартного CrudRepository findAll() (возвращает все поля).

1 Ответ

2 голосов
/ 03 октября 2019

Для начала вам не нужно добавлять @Query, чтобы проекции работали. Достаточно просто указать UserProjection в качестве возвращаемого типа метода в репозитории. Подробнее об этом здесь

Во-вторых, вы можете просто использовать следующий метод в своем хранилище в качестве метода findAll на основе проекции;

public List<UserProjection> findAllProjectedBy();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...