4

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

但是,当我覆盖默认值时 - 我所做的只是:

... MyRevisionEntity extends DefaultRevisionEntity

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

有谁知道为什么?

使用环境 4.1.5_Final...

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

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

和私有长时间戳;

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

谢谢你的帮助!

4

1 回答 1

2

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

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

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

但是,如果没有检测到自定义实现,generateDefaultRevisionInfoXmlMapping则会调用它来自动构建适当的 XML 结构,该结构使用硬编码的列名来表示@RevisionNumber@RevisionTimestamp注释字段;因此,您会得到名为REVand的列REVTSTMP

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

于 2016-12-09T01:17:43.617 回答