[英]SpringBoot DTO + JPA with List<T> property
假設我有以下實體,(為了簡單起見,我跳過了構造函數):
public class Person {
int id;
String name;
String lastName;
Date birthday;
List<Vehicles> vehicles;
}
我想創建一個 DTO,以便僅從數據庫中獲取我需要的內容:
public class PersonDTO {
int id;
String name;
List<Vehicles> vehicles;
}
我的 Crud 存儲庫如下所示:
Person findById(int personId);
但我想把它改成:
PersonDTO findById(int personId);
如果我刪除車輛屬性(是一個列表),它可以完美運行,但我確實需要這個列表。 有什么線索嗎?
定義投影的另一種方法是使用值類型 DTO(數據傳輸對象),這些 DTO 包含應該檢索的字段的屬性。 這些 DTO 類型可以以與使用投影接口完全相同的方式使用,除了不發生代理並且不可以應用嵌套投影。
您的List<Vehicles> vehicles
是嵌套投影,因此您的方法不適用。 在這種情況下,您需要使用基於界面的投影:
public interface PersonProjection {
int getId();
String getName();
List<VehicleProjection> getVehicles();
interface VehicleProjection {
// Getters for desired fields of Vehicle as above for Person(Projection)
}
}
然后您可以將存儲庫方法更改為
PersonProjection findById(int personId);
不幸的是,基於接口的方法性能稍差,因為正如參考文檔所述,會發生代理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.