无需@Query注解,JpaRepository如何返回单个String类型结果?
不用@Query也能实现,给你两种靠谱方法
方法1:用接口投影(最常用)
Spring Data JPA默认要求Repository方法返回实体类或者合法的投影,直接返回String会因为类型不匹配报错。用接口投影就能解决:
- 先写个只包含目标属性getter的接口:
interface ContractorNameProjection { String getContractorName(); }
- 然后在你的Repository里定义返回这个接口的方法:
ContractorNameProjection findById(Long id);
- 用的时候调用getter拿字符串就行:
ContractorNameProjection projection = quotationRepository.findById(1L); String contractorName = projection.getContractorName();
方法2:用@Projection注解做可复用投影
如果这个投影要在多个地方用,可以给接口加个@Projection注解绑定到实体:
import org.springframework.data.rest.core.annotation.Projection; @Projection(name = "contractorName", types = Quotations.class) interface ContractorNameProjection { String getContractorName(); }
Repository里的方法写法和方法1一样,用起来也没区别。
为啥直接返回String不行?
你之前的错误是因为Spring Data JPA默认会生成查询整个Quotations实体的SQL,然后想把整个实体对象转成String,这肯定类型不匹配。而投影会让JPA自动生成只查contractorName字段的SQL,返回的投影对象能安全提取你要的字符串。
内容的提问来源于stack exchange,提问作者xRay
相关产品推荐
相关产品推荐

