实现一对多关系的最佳实践是什么?

我正在开发一个rest API,该API提供一个端点来插入Rule and Items。我有一个名为rule的实体和另一个名为item的实体,例如波纹管:

Rule.java

@Getter
@Setter
@Entity
@Table(name = "rule")
public class Rule extends PhysicalBaseEntity {

    @NotNull
    @Column(name = "title")
    @Size(max = 100)
    private String title;

    @NotNull
    @Column(name = "description")
    @Size(max = 150)
    private String description;

    @OneToMany(cascade = {CascadeType.MERGE},orphanRemoval = true)
    @JoinColumn(name = "rule_id",nullable = false)
    private Set<Item> items;

}

Item.java

@Getter
@Setter
@Entity
@Table(name = "item")
public class Item extends PhysicalBaseEntity {

    @NotNull
    @Column(name = "code")
    @Size(max = 50)
    private String code;

    @NotNull
    @Column(name = "description")
    @Size(max = 150)
    private String description;

    @ManyToOne(cascade={CascadeType.ALL})
    @JoinColumn(name = "parent_id",referencedColumnName = "id")
    private Item parent;

    @OneToMany(mappedBy="parent",cascade={CascadeType.ALL})
    private Set<Item> children;

}

,我需要使用VO实体来表示该信息,但是我不知道如何ll create this VO's and I don不知道这种方法是否是最好的。 我的第一个想法是Rule实体发送所有信息,例如:

{
    "id": "55cfd101-3bc3-4842-a1ab-f88096b9ea06","title": "TITLE","description": "DESCRIPTION","items": [
        {
            "id": "fa1c8e5f-5791-491b-b1ee-4d09048608d6","code": "2","description": "PARENT","children": [
                {
                    "id": "755bed57-1581-4524-bae1-4ec648711a88","code": "000","description": "FIRST SON"
                    "children": [
                        {
                            "id": "1420ad3b-5278-48fe-a638-77a2e16feb39","code": "111","description": "SECOND SON"
                            "children": [
                                {
                                    "id": "f55cf8d1-b2e4-4a9e-9f79-df156a5ac0a4","code": "222","description": "THIRD SON"
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

这对我来说是最好的主意吗?

min_garden 回答:实现一对多关系的最佳实践是什么?

一切取决于您的要求和情况。 您应该了解以下内容:

  1. 如果您的实体中发生某些变化,客户端会在同一时间更新吗?如果是这样,您可以将您的实体用作DTO,但这是一个不好的做法,因为您也需要担心客户端。或者,当客户向您发送一些不在实体中的属性时,可以向您的实体添加一些@JsonProperty / @JsonIgnore(ignoreUnknown=true)批注,以保护自己免受字段名称不匹配或情况的影响。

  2. 如果与客户无关,并且不会更改,例如您将向实体添加新字段-您可以创建看起来像实体的DTO(除了JPA注释之外),并使用它们。编写一些utils映射器,该映射器将从DTO中获取数据,将其转换为实体,然后调用save()方法(或您想对实体执行的任何操作)。但是,根据您的情况,因为您有某种树形结构-这样的映射器会稍微复杂一些。

如果我是您-我最好坚持使用选项2。它更复杂,需要更多代码,但将来它将更具可伸缩性,灵活性和易于支持性

本文链接:https://www.f2er.com/3163984.html

大家都在问