我有两个表FoodAudit
,IngredientAudit
镜像(加上一些额外的列(这些表Food
和Ingredient
作为我正在处理的修订系统的一部分。理想情况下,这两个表都会映射到我的域模型中RevisionDetail<T>
对象,但这被证明有点棘手。为此,我想嵌入一个Food
或Ingredient
对象,如下所示。
@Entity
public class RevisionDetail<T> {
@Column(name="RevisionId")
private int revisionId;
@Column(name="Operation")
private Operation operation;
@Embedded
private T entity;
public RevisionDetail() {}
}
但是,在审计表上,该列不是Id
,而是在审计表上FoodId
或IngredientId
。我想使用 @AttributeOverride
注释,但列名会根据它是 Food
对象还是Ingredient
对象而变化。我该如何完成此操作?
考虑使用 Envers。
如果你想通过我们自己实现它,我建议使用继承和@MappedSuperClass
基类型的注释,该注释将由所有可审计的子类扩展。
@MappedSuperClass
publci class BaseEntity{
@Id
Long id;
}
比将实体映射到修订版的可能性更大:
@OneToOne
@JoinColumn(name="fk_id")
BaseEntity entity;
@AttributeOverride只能覆盖@Column注记的属性。列名。
@Embeded可以用于@Embedable不是实体且没有自己的表的类。按拥有实体/表的一部分嵌入的意志字段