簡體   English   中英

在為 REST API 實現 DTO 模式時如何處理 OneToOne 關系?

[英]How to deal with a OneToOne relationship when implementing the DTO pattern for a REST API?

給定兩個實體EmployeeEmployeeAddress ,我正在嘗試實現 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM