使用spring-data-jdbc进行审核?

时间:2019-07-08 09:40:32

标签: java spring aggregateroot auditing spring-data-jdbc

我在上一个question中看到了响应! ,但并不能解决我的问题。

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

// IsNewAwareAuditingHandler#markAudited //触发markModified方法。 curve_fit(spot_yields_df, 30) Out[52]: array(6.84325277)

集合根与实体之间有什么区别?使用第一次保存时,如何设计可以用entity.isNew(object) ? markCreated(object) : markModified(object);@CreatedDate保存的实现? @CreatedBy@LastModifiedDate

1 个答案:

答案 0 :(得分:0)

您所说的话对我来说似乎是个错误。 如果您在事件侦听器中设置ID,则仍应将其作为新实例进行处理。 请在https://jira.spring.io/browse/DATAJDBC

提交问题
  

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

作为解决方法,您可以将IsNewAwareAuditingHandler与事件处理程序结合使用以设置ID。

  

聚合根与实体之间有什么区别?

实体是通过其ID标识的对象,请注意,该ID可能是隐式的。 见下文。

聚集是一组对象(通常很小),它们属于同一对象,并在单个事务中持久存在。 例如,PurchaseOrder和它的LineItem都是属于同一聚合的两个实体。 单个对象很可能是它自己的聚合。

聚合根是聚合中的一个实体。 与聚合成员的所有交互都应通过聚合根。 这允许聚合根控制一致性。 例如,在上面给出的示例中,PurchaseOrder将是聚合根。 因此,您将没有一个getItems()吸气剂来返回项目的生命周期集合。相反,您可能会有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