[英]How to return custom object using projection in Spring Data Jpa?
[英]JPA: Return custom object using projection
我在SponsorRepository
中有這段代碼,它擴展JpaRepository<Sponsor, Long>
...
@Query(value = "SELECT s.fundraiser_name, d.amount_in_pence/100" +
" FROM sponsor_form s INNER JOIN donation d ON s.id = d.sponsor_form_id " +
"WHERE d.charity_id = :charityId ORDER BY d.amount_in_pence*100 DESC LIMIT 5", nativeQuery =
true)
public List<Sponsor> findTopFiveSponsors(@Param("charityId") Long charityId);
問題是,在運行服務器時,它給了我一個錯誤,說找不到 id。 我對此進行了研究,發現我正在讓 function 返回贊助商列表,即使查詢本身返回籌款人名稱和金額。 此外,JPA 不能將 map 列入贊助商名單。 有人建議我使用 JPA 投影。 我需要采取哪些步驟才能這樣做? 投影是解決方案還是RestController
?
為您的結果元組創建新的保護接口:
public interface SponsorProjection {
String getName();
Long getAmount();
}
然后添加別名並更改返回類型:
@Query(value = "SELECT s.fundraiser_name as name, d.amount_in_pence/100 as amount " +
"FROM sponsor_form s INNER JOIN donation d ON s.id = d.sponsor_form_id " +
"WHERE d.charity_id = :charityId " +
"ORDER BY d.amount_in_pence * 100 DESC LIMIT 5", nativeQuery = true)
public List<SponsorProjection> findTopFiveSponsors(@Param("charityId") Long charityId);
您的 controller 將如下所示:
@RestController
public class SponsorController {
@Autowired
private SponsorRepository repo;
@GetMapping(path = "/findTopFiveSponsors")
public ResponseEntity<?> get(@Param("charityId") Long charityId) {
return ResponseEntity.ok(repo.findTopFiveSponsors(charityId));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.