java - 使用 spring-data-jdbc 进行审计?

标签 java spring aggregateroot auditing spring-data-jdbc

我已经看到之前的回复question ! ,但这并没有解决我的问题。

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

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

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

最佳答案

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

How to design an implementation that can be saved with @CreatedDate and @CreatedBy when using the first save? @LastModifiedDate and @LastModifyBy?

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

What is the difference between an aggregate root and an entity?

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

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

聚合根是聚合中的一个实体。 与聚合成员的所有交互都应该通过聚合根。 这允许聚合根控制一致性。 例如,在上面给出的示例中,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

关于java - 使用 spring-data-jdbc 进行审计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56932174/

相关文章:

entity-framework - 臭名昭著的 Entity Framework ——聚合根问题

domain-driven-design - 继承和聚合根

domain-driven-design - 通过复合身份 DDD 导航到聚合根内的实体

java - Access-Control-Allow-Origin 是否足以防止 XSRF 攻击?

spring - 速度聚类问题

java - 在Java中将大对象作为参数传递是否效率低下?

java - 循环中存在重复变量(空副本)?

java - 无论如何@Inject/@Autowire 一个内部类到一个外部类?

java - Java Arithmetic 中的字符串(评估混合类型表达式)

java - Selenium InternetExplorerDriver 添加 cookie