我有两个表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
对象而变化。我应该如何去实现呢?
答案 0 :(得分:0)
考虑使用Envers。
如果您想自己实现它,我建议对所有可审计子类都将扩展的基类型使用带有@MappedSuperClass
批注的继承。
@MappedSuperClass
publci class BaseEntity{
@Id
Long id;
}
无法将实体映射到修订版本:
@OneToOne
@JoinColumn(name="fk_id")
BaseEntity entity;
@AttributeOverride只能覆盖@Column批注的属性。列名。
@Embeded可以用于@Embedable类,该类不是实体并且没有自己的表。可嵌入字段将由拥有实体/表的一部分