public class AggregateRoot {
private Integer id;
private Set<Child> children;
}
public class Child {
private Integer id;
private String name;
}
想象一下,您需要保存
Child
并将其ID发送到某个外部系统。在DDD中,您将使用与以下代码相似的代码来保存子代码:AggregateRoot aggregateRoot = aggregateRootRepository.getById(id);
Child child = new Child();
child.setName("Sun");
aggregateRoot.addChild(child);
aggregateRootRepository.save(aggregateRoot);
externalService.postSavedChildId(child.getId());
当然
child.getId()
将返回null,因为它不在持久性上下文中。知道如何在DDD中处理这种情况吗? 最佳答案
您的情况有两个问题,我将分别解决:
对非汇总根实体的引用
DDD建议聚合根带有全局ID,而“内部”实体ID仅具有局部意义。因此,您不应仅公开内部ID,因为它不会唯一地寻址实体。
数据库生成的ID
出于您遇到的原因,使用DB生成的ID不太适合DDD。最好的方法通常是使用生成的随机ID。 This answer有关该主题的更多信息。
边注
通过阅读您的问题,我得到的印象是您采取了一种以DB为中心的方法(使用DB生成的ID就是一种证明)。 在使用DDD时,请尝试首先关注域模型并围绕该域模型构建数据库基础结构。
关于java - 用Hibernate保存后DDD找出子元素的ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34814890/