为什么覆盖更改列名称

时间:2012-10-04 22:12:46

标签: hibernate audit hibernate-envers

我正在使用rev监听器的默认实现,正如预期的那样,我的REVINFO表中的列是:revtstmp和rev。

然而,当我超越默认值时 - 我所做的只是:

... MyRevisionEntity extends DefaultRevisionEntity

这些列名称已更改为“timestamp”和“id”。

任何人都知道为什么?

使用envers 4.1.5_Final ...

**编辑** 由于还没有人回答,我正在添加更多信息。

Adam Warski撰写的“DefaultRevisionEntity”类只定义了两个成员:     private int id;

和     私人长时间戳;

因此,我理解当我扩展该类时,那些将是我应该期望的列名。然而,“莫名其妙”的问题是:为什么当我没有扩展默认值时,列是不同的(分别是rev和revtstmp)以及文档说的是什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

简短的回答是因为当您不进行扩展时,Envers会使用一个默认配置,该配置具有硬编码的列名,例如:它们不是源自实体类的元数据。当您扩展DefaultRevisionEntity时,Envers默认使用标准ORM命名策略。

从技术上讲,RevisionInfoConfiguration是罪魁祸首。

作为Envers引导程序的一部分,将调用此类的#configure()方法,并在定义的实体中搜索自定义修订实体实现。如果检测到实现,Envers基本上像任何其他实体一样映射类。

但如果未检测到自定义实现,则会调用generateDefaultRevisionInfoXmlMapping,它将自动构建适当的XML结构,该结构使用@RevisionNumber@RevisionTimestamp注释字段的硬编码列名称;你会得到名为REVREVTSTMP的列。

我已经注册了JIRA问题HHH-11325以解决改进问题。