当前位置: 首页 > 知识库问答 >
问题:

Hibernate Envers在与鉴别器列联接继承的情况下为鉴别器值生成错误值

袁雅逸
2023-03-14

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

父实体:

@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;
    }

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

附注。我使用的是hibernate 5.0.9.Final。

共有1个答案

楚彦
2023-03-14

这似乎是Hibernate5.x与Hibernate4.3.11.final观察到的行为之间的一个回归问题。我已经记录了一个jira问题HHH-11133,注意到这个行为问题。

 类似资料:
  • Discriminator 是一种 schema 继承机制。 他允许你在相同的底层 MongoDB collection 上 使用部分重叠的 schema 建立多个 model。 假设你要在单个 collection 中记录多种 event, 每个 event 都有时间戳字段,但是 click 事件还有 URL 字段, 这时你可以用 model.discriminator() 实现上述要求。 此函

  • 我有一个奇怪的行为,JPA类层次结构使用一个表。基本上,我有两个实体EntityMap和EntityMapB,它们都扩展了EntityMaps。鉴别器值为“ENTITY_TYPE”,对于EntityMap为A,对于EntityApb为B。不知何故,我得到了EntityMapA类型的对象,其中鉴别器值设置为“B”! 我正在使用Hibernate 3.3作为JPA提供程序。 这是代码: 最后,我在En

  • 问题内容: 我有一个Client和Affiliate类,它是从Person类继承的。正在使用联接的继承策略类型- 它们中的每一个都与父类共享主键。由于没有鉴别符列,我们选择使用DescriptorCustomizer和ClassExtractor。但是它并没有真正让人们知道它是如何工作的,而且代码似乎也没有编译。如果有人给出一个带有代码片段的漂亮示例以供理解,那将是很好的。 问题答案: 根据上述文

  • 问题内容: 是否可以强制休眠将歧视符列用于继承的继承类型?根据JPA2.0规范,这应该可行,但是我无法在休眠状态下实现。 例: 使用hibernate.hbm2ddl.auto create时,这甚至都不会在表PARENT中创建列TYPE。 我知道InheritanceType.JOINED可以在不定义鉴别符列的情况下工作,但是它是非常无效的,因为在使用鉴别符列中的信息时,休眠需要在父对象和所有子

  • 在@inheritage类型Joined中 我有班级成员、员工和学生 因此,当我保存Employee或Student记录,然后检索Person记录时,它给我的鉴别器列值为NULL,但在重新启动服务器后,它给我相应的值 如果我手动设置鉴别器列值的值,然后保存和检索,那么它会给我这个值(我需要手动设置鉴别器列值吗?)那么使用鉴别器列有什么好处呢 为什么我不应该使用一个具有列类型的employee和st

  • 如何为每个子类设置默认鉴别器? 例如,采用以下架构: 上述架构的代码生成器将创建一个客户端,其中 值必须由程序员显式设置。为什么默认情况下不能将 对象将 设置为? 我尝试使用来使其正常工作。但是,生成的代码包括阴影属性(子属性和父属性相同)。 从父对象中删除属性< code>petType也不太合适,因为从技术上讲,它更像是父对象的属性,而不是子对象的属性。 你对这个问题有什么解决办法吗?