在带有鉴别器列的连接继承的情况下,Hibernate Envers为鉴别器值生成错误的值

时间:2016-09-25 19:40:58

标签: hibernate hibernate-envers

我有一个带有鉴别器列的连接继承映射。

父实体:

@Entity
@Audited
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type")
public abstract class ParentEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(insertable = false, updatable = false)
    private String type;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

子实体:

@Audited
@Entity
@DiscriminatorValue("child_1")
public class ChildEntity extends ParentEntity {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

当我尝试持久化ChildEntity时,hibernate会生成包含完全限定的子类名称加上' _AUD'对于鉴别器列,这是一个例子:

insert 
into
    parent_entity_aud
    (revtype, type, id, rev) 
values
(?, 'io.samples.data.jpa.domain.ChildEntity_AUD', ?, ?)

请注意,类型的值为' io.samples.data.jpa.domain.ChildEntity_AUD' 而不是' child_1'

另一个观察结果是,如果我从父实体中删除@DicriminatorColumn而从子实体中删除@DiscriminatorValue则会起作用。

有人知道如何解决这个问题吗?

P.S。我正在使用hibernate 5.0.9.Final。

1 个答案:

答案 0 :(得分:1)

这似乎是Hibernate 5.x与Hibernate 4.3.11.Final观察到的行为的回归问题。我已经记录了一个jira问题HHH-11133,注意到这个问题。