1

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

任何的想法 ?谢谢,
阿德里安

4

1 回答 1

1

由于您使用的是 Hibernate,因此有一个非常好的声明式解决方案:

恩弗斯

Envers(用于En tiy Vers ions)自动检测带有注释的实体上的更改@Audited并在数据库中创建历史记录。您甚至可以将自定义信息添加到修订中,例如进行更改的用户。

有关详细信息,请参阅Envers 快速入门

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

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

于 2012-10-15T13:28:35.897 回答