【问题标题】:Conditional @AttributeOverride Hibernate annotation有条件的@AttributeOverride Hibernate 注解
【发布时间】:2019-03-26 00:52:10
【问题描述】:

我有两个表 FoodAuditIngredientAudit 镜像(加上一些额外的列)表 FoodIngredient 作为我正在处理的修订系统的一部分。理想情况下,这两个表都将映射到我的域模型中的RevisionDetail<T> 对象,但事实证明这有点棘手。为此,我想嵌入FoodIngredient 对象,如下所示。

@Entity
public class RevisionDetail<T> {        
    @Column(name="RevisionId")
    private int revisionId;

    @Column(name="Operation")
    private Operation operation;

    @Embedded
    private T entity;

    public RevisionDetail() {}
}

但是,审计表上的列是审计表上的 FoodIdIngredientId,而不是 Id。我会考虑使用@AttributeOverride 注释,但列名会根据它是Food 还是Ingredient 对象而变化。我该怎么做呢?

【问题讨论】:

    标签: hibernate jpa hibernate-annotations


    【解决方案1】:

    考虑使用Envers

    如果您想自己实现它,我建议在基类型上使用带有@MappedSuperClass 注释的继承,该基类型将被所有可审计的子类扩展。

    @MappedSuperClass
    publci class BaseEntity{
        @Id 
        Long id;
    }
    

    可以将实体映射到修订版:

    @OneToOne
    @JoinColumn(name="fk_id")
    BaseEntity entity;
    

    @AttributeOverride 只能覆盖 @Column 注释的属性。列名。

    @Embeded 可以用于@Embedable 类,它不是实体并且没有自己的表。可嵌入的字段将由拥有实体/表的一部分

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 2017-06-19
      • 1970-01-01
      • 2017-05-29
      • 2018-03-15
      • 2018-06-08
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      相关资源
      最近更新 更多