Как вернуть пользовательский список с несколькими полями из пользовательского запроса с помощью Spring Boot? - PullRequest
1 голос
/ 23 июня 2019

Я разрабатываю веб-сервис REST с Spring Boot 2 и Java 8. У меня проблема с созданием списка с несколькими полями по сравнению с тем, когда я получаю список со всеми полями таблицы.

@Query("SELECT c.idCliente, c.nome, c.cognome, c.username, c.email FROM Cliente c WHERE c.username LIKE %:username%")
List<Cliente> findClienteByUsername(@Param("username") String username);

Результат:

[
   3,
   null,
   null,
   "user",
   "aaa"
]

Но при показе всех полей получим это:

{"idCliente":3,"username":"user","nome":null,"cognome":null,"dataNascita":null,"email":"aaa","password":"ciao","dataCreazione":"2018-11-23T21:33:31.000+0000","instagram":null,"facebook":null,"google":null,"twitter":null,"attivo":"1","ultimaSospensione":null}

Почему я не могу получить имена полей вместе со значениями?

Ответы [ 2 ]

3 голосов
/ 23 июня 2019

Хотя вам нужно выбрать несколько полей, вы должны перейти с Spring Projection через класс DTO.Вы должны определить конструктор с выбранными полями.

@Query("SELECT new Cliente(c.idCliente, c.nome, c.cognome, c.username, c.email) FROM Cliente c WHERE c.username LIKE %:username%")
List<Cliente> findClienteByUsername(@Param("username") String username);

Вы можете обратиться по ссылке ниже с подробной информацией.https://smarterco.de/spring-data-jpa-query-result-to-dto/

Или вы можете выполнить ручной перевод для каждой строки, используя функцию картографирования.

 @Query("SELECT c.id, c.nome, c.cognome, c.username, c.email FROM Cliente c WHERE c.username LIKE %:username%")
List<Object[]> findClientDeatailsByuserName(@Param("username")String username);
0 голосов
/ 23 июня 2019

Попробуйте это: создайте нижеупомянутый конструктор в классе сущности Cliente.

Cliente(int idCliente,String noame,String cognome,String username,String email){
   this.idCliente=idCliente;
   this.nome=nome;
   this.cognome=cognome;
   this.username=username;
   this.email=email;   
 }

Вызовите запрос как:

@Query("SELECT new packageName.Cliente(c.idCliente, c.nome, c.cognome, c.username, c.email) FROM Cliente c WHERE c.username LIKE %:username%")
List<Cliente> findClienteByUsername(@Param("username") String username);

Он покажет все поля со значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...