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

Spring data rest Domain Driven Design - Posting non aggregate root entities

我正在使用 spring 引导数据 REST 进行在线拍卖 REST api。我正在尝试使用域驱动设计方法。

我有 2 个实体....Listing 和 ListedItem,其中 Listed item 是待售商品,Listing 由 ListedItem 组成,并包含有关列表开始和结束时间等的一些其他数据。

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

所以我有一个聚合根(列表)的存储库。

我需要先 POST 我的 ListedItem,然后我才能 POST 一个列表及其链接的 ListedItem。

我现在如何 POST 使用 spring 数据休息的 ListedItem?没有端点为此公开,因为它没有自己的存储库。

我希望能够 POST ListedItem 到 /api/listed-item,但是如果我只有每个聚合路由的存储库,那么在使用 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> {
}

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