有条件@AttributeOverride休眠注释



我有两个表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对象而变化。我该如何完成此操作?

考虑使用 Envers。

如果你想通过我们自己实现它,我建议使用继承和@MappedSuperClass基类型的注释,该注释将由所有可审计的子类扩展。

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

比将实体映射到修订版的可能性更大:

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

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

@Embeded可以用于@Embedable不是实体且没有自己的表的类。按拥有实体/表的一部分嵌入的意志字段

最新更新