使用 DDD 映射用户、地址、国家/地区

问题描述 投票:0回答:1

我正在尝试使用 spring、hibernate 创建一个电子商务网站,并且第一次遵循 DDD。

目前的情况是这样的。我正在考虑将对象 USER 作为聚合根,它具有地址列表(以前的地址和当前的地址),并且对于每个地址都有关联的国家/地区(isocode、名称)..

我假设地址和国家/地区是值对象..与用户严格相关。

在@Entity类User中有:

@ElementCollection
@CollectionTable(name = "addresses", joinColumns = @JoinColumn(name = "address_id"))
@OrderColumn(name="user_id")
private List<Address> addresses;

在@Embeddable类地址中,我想为国家/地区创建一个单独的表,我可以在初始化期间填充该表,并且地址只有一个外键。

我尝试了@Embeddable Country 和地址 @嵌入式 私人国家

还有@SecondaryTable ..但这只能在@Entity类中使用..所以问题是国家/地区的字段保存在地址表中。

我应该为国家/地区创建一个@Entity 吗?或者还有另一种方法来映射这些类?

hibernate domain-driven-design street-address country
1个回答
0
投票

我真的不明白将

Country
制作为嵌入式对象有什么意义。您将为所有用户一次又一次地重复相同的代码和名称,而不是仅仅让它们都指向相同的国家/地区。只需有一个包含所有国家/地区的表格,由实体映射,并使所有引用的地址与国家/地区有
ManyToOne
关联。

顺便说一句,如果你想设计一个必须输入地址的用户界面,我想你需要一个显示所有国家/地区可供选择的选择框:你不会每次都手动输入国家/地区的代码和名称时间。因此,您需要一个

Country
实体和
findAll
方法来获取所有这些并填充您的选择框。

© www.soinside.com 2019 - 2024. All rights reserved.