ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-用Hibernate保存后DDD找出​​子元素的ID

2019-10-27 13:02:53  阅读:284  来源: 互联网

标签:domain-driven-design hibernate java


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中处理这种情况吗?

解决方法:

您的情况有两个问题,我将分别解决:

>我们应该如何分发非聚合根实体的ID?
>使用数据库生成的ID时,如何在保存之前获取实体的ID?

对非聚合根实体的引用

DDD建议聚合根带有全局ID,而“内部”实体ID仅具有局部意义.因此,您不应仅公开内部ID,因为它不会唯一地寻址实体.

>拆分两个实体,并使内部实体成为其自身的集合.现在,它已具有全球性,可以从外部寻址.
>如果(1)在您的域中没有意义,请向外部系统公开一个组合的ID.您必须能够将组合的ID分为聚合根ID和(本地)内部实体ID.

数据库生成的ID

出于您遇到的原因,使用DB生成的ID不太适合DDD.最好的方法通常是使用生成的随机ID. This answer有关此主题的更多信息.

边注

通过阅读您的问题,我得到的印象是您采取了一种以DB为中心的方法(使用DB生成的ID就是一种证明).使用DDD时,请尝试首先关注域模型并围绕该域模型构建数据库基础结构.

标签:domain-driven-design,hibernate,java
来源: https://codeday.me/bug/20191027/1944682.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有