2012-10-15 92 views
1

我正在寻找一个优雅的方式来实现下一个任务: 我有一个名为Ticket的实体,它有一些字段,如:owner,createdTs,body ....,还有一个List实体将跟踪票上执行的所有更改。
我的应用程序是用Strus2,Spring 3,Jpa + Hibernate构建的,我有一个服务类TicketService,它有save/updateTicket(Ticket ticket)方法。
我试图实现一个方面@Before保存/更新方法,但我的问题是,我无法访问票的旧值,以检测更改并根据这些更改创建TicketHistory对象。
我尝试了方面的方法,因为我从许多其他方法访问此方法,现在这些对象(Ticket和TicketHistory)紧密耦合。日志域对象更改

有什么想法吗? 谢谢,
阿德里安

回答

1

既然你在使用Hibernate,有一个非常好的解决方案声明:

Envers

Envers(为 titiy 弗斯离子)会自动检测上的变化用@Audited注解的实体,并在数据库中创建一个历史记录。您甚至可以将自定义信息添加到修改版本的用户,如进行更改的用户。

查看Quickstart for Envers了解更多信息。

缺点是你必须更改一些代码量,因为不再需要TicketHistory了。较早版本的实体可通过AuditReader类访问。

另请注意,使用Envers时,程序直接依赖于Hibernate,而不仅仅是JPA。如果你想改变你的持久性提供者(而不是经常发生这种情况),你会有更多的工作要做。

+0

嗨,感谢提示,我已经实现了使用envers,似乎工作正常。 –