问题描述
我有一个微服务,该微服务具有一个小的实体结构和一个用于我的客户端的REST接口。
我想要的是:我想跟踪实体中特定原始属性的所有更改。
现在,客户将书名更改为某些页面的颜色,并将更新请求发送到服务器。
我想(在同一事务中)将这些更改保存到数据库中,是为每个已更改的原始属性在“ book_changes”和“ page_changes”表中添加一行。诸如“ 用户X将属性Y从值R更改为值U ”的行
-
如何指定应该监视哪些属性?是否可以选择自己的注释“ @MonitorChange”,还是在运行时无法访问注释?
-
如何确保使用Spring Data JPA在一次事务中发生这种情况?我是否只需要将@Transactional注释添加到我的服务类或方法中?
@Service
@Transactional
public class BookService {
@Transactional
public Book updateBookWithPages(Book book){
saveEntity(book)
saveChangestochangesTable(book.computeChanges())
}
}
感谢您的帮助
解决方法
Hibernate Envers是实现此目的的合理工具。您只需将实体或属性注释为@Audited(并为其创建审计表),然后进行处理以拦截器。