有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring data rest域驱动设计发布非聚合根实体

我正在使用SpringBootDataREST制作一个在线拍卖RESTAPI。我试图使用领域驱动的设计方法

我有两个实体。。。。Listing和ListedItem,其中列出的项目是供销售的项目,而Listing由ListedItem组成,并包含有关上市开始和结束的其他数据

我觉得在这种情况下,列表必须是聚合根,这样才能控制ListedItem,如果我删除列表,该项也会被删除

因此,我有一个用于聚合根的存储库(清单)

我需要先发布我的ListedItem,这样我就可以发布一个带有链接ListedItem的列表

现在如何使用SpringDataREST发布ListedItem?没有为此公开端点,因为它没有自己的存储库

我希望能够将ListedItem发布到/api/ListedItem,但如果我只有一个用于每个聚合路由的存储库,那么在使用ddd时,我无法解决如何做到这一点

当然ListedItem需要它自己的存储库吗

以下是我的实体和存储库,以备不时之需:

@Entity
@Table(name = "listed_item")
@Getter
@ToString
@EqualsAndHashCode
public class ListedItem extends BaseEntityModel {

    private String name;

    private String shortDescription;

    private String fullDescription;

}

@Entity
@Table(name = "listing")
@Getter
@ToString
@EqualsAndHashCode
public class Listing extends BaseEntityModel {

    @OneToOne
    private ListedItem listedItem;

    @Enumerated
    private PossibleListingState currentState;

    private long numBids;

    public Listing() {

    }

    public PossibleState getCurrentState() {
        return currentState;
    }

    public void setCurrentState(PossibleListingState currentState) {
        this.currentState = currentState;
    }
}



@RepositoryRestResource(collectionResourceRel = "listings", itemResourceRel = "listing")
public interface ListingRepository extends PagingAndSortingRepository<Listing, String> {
}

共 (1) 个答案

  1. # 1 楼答案

    I will need to POST my ListedItem first so that I can then POST a listing with its linked ListedItem.

    这是一种误解。如果Listing是聚合根,没有它的ListedItem实体就不能存在,那么必须同时创建这两个实体。因此,您很可能只需要POST到一个/listings资源,并使用必要的数据同时创建ListingListedItem