条件@AttributeOverride休眠注释

时间:2019-03-26 00:52:10

标签: hibernate jpa hibernate-annotations

我有两个表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() {}
}

但是,在审核表上该列不是Id,而是在审核表上为FoodIdIngredientId。我认为可以使用@AttributeOverride注释,但是列名会根据是Food还是Ingredient对象而变化。我应该如何去实现呢?

1 个答案:

答案 0 :(得分:0)

考虑使用Envers

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

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

无法将实体映射到修订版本:

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

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

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