[英]How to return a custom List with few fields from a custom query with Spring Boot?
我正在使用Spring Boot 2和Java 8开发REST Web服务。与使用表的所有字段列表时相比,我在创建包含少量字段的列表时遇到问题。
@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}
为什么我不能获得字段名称和值?
虽然您必须选择几个字段,但您必须通过DTO课程使用Spring Projection。 您必须使用所选字段定义构造函数。
@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);
试试这个:在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);
它将显示所有具有价值的字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.