【发布时间】:2014-11-02 14:40:29
【问题描述】:
在 Spring MVC / Spring Data 项目中,我需要实现一种机制来跟踪历史记录、呈现差异并将更改还原为实体对象。
假设我有一个与其他人有这样关系的实体:
@Entity
public Class ModelA{
@OneToOne(cascade = CascadeType.ALL)
private ModelB modelB;
@OneToOne(cascade = CascadeType.ALL)
private ModelC modelC;
}
我想要更改列表,能够比较和还原它们。我知道使用 Ruby 有一些库可以提供这种功能,但我不知道 Java 中是否存在这样的东西。
Spring 有一个 historiography API 并且 Hibernate Envers 已被合并到核心功能中,尽管我仍然找不到一个简单的示例或一些如何实现它的指导。
如果相关,使用的数据库是 PostgreSQL 和 Oracle 11g,但我想保持它独立于数据库。
【问题讨论】:
-
我曾经看到过使用历史支持存储数据的实现。在 PLSQL 上,它在没有任何框架的情况下被白色化,这太可怕了。主要思想 - 你有 PK = 实体 ID + 修订时间。所有选择查询都可以返回最后一个修订版(默认情况下)或某个时间的修订版。这种方法的缺点 - 编写代码和查询非常困难,sql查询速度慢并且失去了FK能力。我知道,这不是对您问题的回答,但也许这对您有所帮助。
标签: java spring hibernate jpa spring-data