Hibernate Envers modifiedFlag 列名

Hibernate Envers modifiedFlag column name

我正在使用 Hibernate Envers 5.3.7 并具有以下实体:

@Audited(withModifiedFlag=true)
public class MyEntity {

    @Column(name = "item_condition")
    private String condition;

如您所见,数据库中的列名与 属性 名称不同。 如果我尝试保存实体然后 envers 抛出异常:

Cause: Unknown column 'condition_mod' in 'field list'
Query is: insert into MyEntity (revtype, item_condition, condition_mod,

有什么办法可以控制修改后的flag列名吗?类似于使用我的实体中定义的主列名,或者只是为 属性?

定义 modifiedFlag 列名

你可能想看看问题HHH-10398

在 Hibernate Envers 5.x 和之前的版本中,modified 标志支持总是基于实际的 属性 名称而不是 @Column注解作为其基础。这就是为什么您注意到插入失败的原因,它希望您的模式有一个名为 condition_mod.

的列

作为解决方法,您可以使用 属性 上的 @Audited 注释明确指定 mod 化列的全名,直到解决上述问题并实施策略模式以支持未来和向后兼容性。

在您的情况下,您将 属性 注释如下:

@Column(name = "item_condition")
@Audited(withModifiedFlag = true, modifiedColumnName = "item_condition_mod")
private String condition;

在 Hibernate 6 中,我计划引入一个 ModifiedColumnNameNamingStrategy,其中将有一个支持向后兼容性的遗留 impl 和一个允许您简单地指定 @Column注释和 Envers 将使用它作为列名的基础而不是 属性.

但在添加之前,解决方法是 5.x 及之前的唯一替代方法。


更新HHH-10398 的修复已计划包含在版本 5.4 中。6.Final。