2012-10-04 32 views
3

我正在使用rev侦听器的默认实现,并且如我所料,REVINFO表中的列是:revtstmp和rev。为什么重写更改列名

然而,当我重写默认的 - 我所做的就是:

... MyRevisionEntity extends DefaultRevisionEntity 

那些列名称已更改为“时间戳”和“ID”。

任何人都知道为什么?

使用envers 4.1.5_Final ...

**编辑** 由于目前还没有人回答,我加入了更多的信息。

Adam Warski创作的“DefaultRevisionEntity”类仅定义了两个成员: private int id;

and private long timestamp;

因此,我明白当我扩展那个类时,那些将是我应该期望的列名。然而,这个“令人困惑”的问题是:为什么当我没有扩展默认值时,列是不同的(分别是rev和revtstmp)以及文档的说明?

感谢您的帮助!

回答

0

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

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

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

但是,如果没有检测到定制的实现,generateDefaultRevisionInfoXmlMapping叫,它会自动建立相应的XML结构,它使用了@RevisionNumber@RevisionTimestamp注释字段硬编码的列名;如果您获得名为REVREVTSTMP的列。

我注册了一个JIRA问题HHH-11325来解决这个问题。