我正在寻找一种优雅的方式来完成下一个任务:我有一个名为Ticket的实体,它有一些字段,如: owner,createdTs,body……,以及将跟踪在票证上执行的所有改变的列表实体。
我的应用是用Strus2、Spring3、Jpa + Hibernate构建的,我有一个服务类TicketService,它有方法保存/更新票证(票证)。
我试图在保存/更新方法之前实现一个aspect @,但我的问题是我无法访问ticket的旧值来检测更改并根据这些更改创建TicketHistory对象。
我尝试了方面方法,因为我从许多其他方法访问此方法,而现在这些对象(Ticket和TicketHistory)是紧密耦合的。
有什么想法吗?谢谢,
禤浩焯
发布于 2012-10-15 13:28:36
由于您使用的是Hibernate,因此有一个非常好的声明性解决方案:
Envers (适用于En titiy in ions)自动检测使用@Audited
注释的实体上的更改,并在数据库中创建历史记录。您甚至可以向修订添加自定义信息,如进行更改的用户。
有关详细信息,请参阅Quickstart for Envers。
缺点是您必须更改一些代码,因为将不再需要TicketHistory
。旧版本的实体是通过AuditReader类访问的。
还要注意,当使用Envers时,您的程序直接依赖于Hibernate,而不仅仅是JPA。如果你想改变你的持久化提供者(这并不是经常发生),你会有更多的工作要做。
https://stackoverflow.com/questions/12896501
复制相似问题