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