1

我已经看到上一个问题的回答了!,但它并没有解决我的问题。

跟踪spring-data-jdbc的代码,发现只要自定义了BeforeSaveEvent事件,并且在该事件中设置了自定义ID,自定义事件执行后,继续触发RelationalAuditingEventListener#onApplicationEvent在已设置为 ID 的实体。做出 isNew 决定,ieNew=false。

// IsNewAwareAuditingHandler#markAudited // 触发 markModified 方法。 entity.isNew(object) ? markCreated(object) : markModified(object);

聚合根和实体有什么区别?如何设计一个可以保存的实现@CreatedDate以及@CreatedBy何时使用第一次保存?@LastModifiedDate@LastModifyBy

4

1 回答 1

1

你所描述的对我来说听起来像是一个错误。如果您在事件侦听器中设置 id,它仍应作为新实例处理。请在https://jira.spring.io/browse/DATAJDBC提出问题

使用第一次保存时如何设计可以使用@CreatedDate 和@CreatedBy 保存的实现?@LastModifiedDate 和 @LastModifyBy?

作为一种解决方法,您可以将IsNewAwareAuditingHandler与您的事件处理程序结合起来以设置 id。

聚合根和实体有什么区别?

实体是由其 id 标识的对象,请注意 id 可能是隐式的。见下文。

聚合是一个(通常很小的)对象集群,它们属于一起并在单个事务中持久化。例如 aPurchaseOrder和 it'sLineItem都是属于同一个聚合的实体。单个对象完全有可能成为它自己的聚合。

聚合根是聚合中的一个实体。与聚合成员的所有交互都应通过聚合根。这允许聚合根控制一致性。例如,在上面给出的示例PurchaseOrder中将是聚合根。因此,您不会有一个getItems()getter 来返回项目的生命集合。相反,您可能会addItem(productId, amount)并且getItems()会返回项目的副本,因此更改这些不会影响聚合。

Martin Fowlers 定义:https ://www.martinfowler.com/bliki/DDD_Aggregate.html

Vaughn Vernon 关于聚合的精彩文章:

https://dddcommunity.org/wp-content/uploads/files/pdf_articles/Vernon_2011_1.pdf

https://dddcommunity.org/wp-content/uploads/files/pdf_articles/Vernon_2011_2.pdf

https://dddcommunity.org/wp-content/uploads/files/pdf_articles/Vernon_2011_3.pdf

于 2019-07-08T11:16:29.187 回答