[英]Spring Boot API Rest with DTO and @manytoone relationship - best practice
[英]How to deal with a OneToOne relationship when implementing the DTO pattern for a REST API?
給定兩個實體Employee
和EmployeeAddress
,我正在嘗試實現 DTO 模式 - 主要是因為我的 IDE 在我的 REST 控制器中使用實體作為參數時顯示警告。
在這種情況下,我有一個關於如何處理這兩個實體之間的 OneToOne 關系的問題:
父實體:
@Entity
@Table
public class Employee{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstName;
private String lastName;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "employee_address_id")
private EmployeeAddress employeeAddress;
}
子實體:
@Entity
@Table
public class EmployeeAddress{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String street;
private String postalCode;
@OneToOne(mappedBy="employeeAddress")
private Employee employee;
}
我的第一個想法是引入以下兩個 DTO:
@Getter
@Setter
public class EmployeeDTO {
private Long id;
private String firstName;
private String lastName;
private EmployeeAddressDTO employeeAddress;
}
@Getter
@Setter
public class EmployeeAddressDTO {
private Long id;
private String street;
private String postalCode;
}
但是,這似乎不起作用:我必須將EmployeeAddressDTO
中的EmployeeDTO
替換為實際的實體EmployeeAddress
才能使其正常工作。 然而,這對我來說似乎有點矛盾——為什么我要創建一個 EmployeeDTO 只是為了讓它包含一個實體?
所以,我想知道,我該如何處理我的 DTO 中的這種 OneToOne 關系? 我是否必須將 EmployeeDTO 創建為:
@Getter
@Setter
public class EmployeeDTO {
private Long id;
private String firstName;
private String lastName;
private String street;
private String postalCode;
}
這是正確的方法嗎?
why would I create an EmployeeDTO only for it to contain an entity?
,這就是關於 DTO 的全部問題。
在小型或玩具應用程序中,DTO 甚至可能毫無意義。 當您的應用程序不斷增長時,情況會有所不同。 將持久性(實體)與表示(或 API,或與外部世界的接口)分開是一種很好的做法。
定義應用程序數據模型的實體(需要您的應用程序完成工作的數據),DTO 是您想要(以受控方式)導出到世界的內容。
當然,一開始它大多是相同的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.