繁体   English   中英

如何使用Spring Boot从自定义查询返回包含少量字段的自定义列表?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM