[英]Auditing with spring-data-jdbc?
我已经在上一个问题中看到了答案! ,但并不能解决我的问题。
我跟踪了spring-data-jdbc的代码,发现只要自定义BeforeSaveEvent事件并在此事件中设置了自定义ID,在执行自定义事件后,它就会继续触发在上执行RelationalAuditingEventListener#onApplicationEvent已设置为ID的实体。 做出isNew决策,即New = false。
// IsNewAwareAuditingHandler#markAudited //触发markModified方法。 entity.isNew(object) ? markCreated(object) : markModified(object);
聚合根和实体之间有什么区别? 使用第一次保存时,如何设计可以用@CreatedDate
和@CreatedBy
保存的实现? @LastModifiedDate
和@LastModifyBy
吗?
您所描述的内容对我来说似乎是个错误。 如果您在事件侦听器中设置ID,则仍应将其作为新实例进行处理。 请在https://jira.spring.io/browse/DATAJDBC中提交问题
使用第一次保存时,如何设计可以用@CreatedDate和@CreatedBy保存的实现? @LastModifiedDate和@LastModifyBy?
作为解决方法,您可以将IsNewAwareAuditingHandler
与事件处理程序结合使用以设置ID。
聚合根和实体之间有什么区别?
实体是通过其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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.