我的应用程序使用大型域对象树,对于大多数这些对象,我想保留一些基本信息(更新,修改时间等)。我已经添加了这些属性&列到我的应用程序。
当我想到持久层应该透明地处理它时,我正要在所有各种构造函数等中编写这些值的设置。
但是怎么样?
我当然可以在我的DAO中执行此操作,但是如何处理通过级联保存的对象?有没有办法拦截那些persist()方法?
实施此功能的好方法是什么?
答案 0 :(得分:6)
您可能需要查看Hibernate Envers.
答案 1 :(得分:5)
如果您打算使用JPA进行审核,则可以依赖PrePersist和PreUpdate回调注释。 JPA WikiBook has one such example。Openbravo ERP project。在这种情况下,有一个映射的超类很有帮助,否则你将继续通过“用户”空格代码执行此操作。
另一种方法是在表上使用触发器(ahem)。但这确实会对性能产生影响。 here似乎正在使用此方法生成审计跟踪。
更新:最好将审核功能分成不同的类,而不是域模型的超类。 JPA事件监听器将帮助您实现相同的目标。一个很好的例子是{{3}}。