我需要将一个“entity_name”更改为另一个名为“entity_name_history”的日志表,而不使用任何JPA提供程序(我必须更改不使用任何JPA提供程序的现有项目)。我想知道的是在纯JPA中实现历史。
我一直在研究像@postUpdate这样的持久性事件拦截,但据我所知,我不能在那些回调中使用entitymanager,如果可以请告诉我。
答案 0 :(得分:1)
最简单,最干净的解决方案是使用数据库触发器来实现历史记录功能。
答案 1 :(得分:1)
关于该主题有很多文献,尽管它通常被称为“实体审计”。 Hibernate提供了一个名为Hibernate Envers的模块,专门为此构建,显然使用了那种JPA触发器。
implementing it using TopLink(现在是EclipseLink)还有一个(好的?)教程。
所以,是的,这是做的方法,但是,不,你不应该自己做。
答案 2 :(得分:0)
我认为它可以使用,只需要小心使用。以下是JPA规范的引用:
通常,可移植应用程序不应调用EntityManager或Query操作, 访问其他实体实例,或修改生命周期回调方法中的关系。
作为替代方案,您可以使用不同的实体管理器或使用将存在于同一事务中的纯JDBC数据源连接。特别是,如果您不需要在同一JPA会话中对历史对象进行任何操作。