JPA:如何自动生成影子表(历史记录)

我正在使用EclipseLink的历史记录function 。

据我所知,目前还没有实际创建影子表的支持 。 我正在为所有基表使用JPA 2.1自动化模式生成。 工作良好。

现在我正在寻找一种自动化创建影子表的方法。 对于每个基表,应该有一个带有一些额外列的影子表。 否则,影子表具有正在遮蔽的表的确切结构。

我在模型中有超过50个实体,并且在其中抛出了一些多对多关系,所有映射到大约55个物理表。 我不想为所有影子表维护DDL创建脚本。

现在该项目与数据库无关(至少对于通常的嫌疑人而言),我想保持这种方式。 绑定到EclipseLink不是问题所以EclipseLink特定的解决方案是可以的。

那么,如何创建影子表呢?

可以使用子类来表示每个历史表。 假设基类是Car ,那么:

 @Entity @Table(name="CAR_HIST") public class ClassHist extends Car { ... // some extra audit fields here } 

并且在Car上使用@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)注释它实际上将使用JPA模式生成来完成工作。 所以,几乎就是这样。 除了没有实体的多对多关系表,我可以得到实际操作,因此无法获得为关系表生成的影子表。

UPDATE

原来使用inheritance来创建影子表并不是一个好主意。 原因是JPA JPQL查询是多态的 。 这意味着像SELECT a FROM Car这样的查询实际上也会进入CAR_HIST表,因为CarHist只是Car一个子类。 从这些表中获取SELECT的UNION。 显然不想要我想要。 它不是一个好主意的另一个原因是用于历史的子类将inheritance其父级的主键。 这也是完全错误的。

更新2

我发现EclipseLink中有这个function的RFE 。