【发布时间】:2014-03-31 18:38:24
【问题描述】:
我正在使用 Hibernate 4.3.1.Final
如果我有两个实体,假设 A 和 B。A 包含一组 B 对象,这些对象被注释为 OneToMany 关联。
如果我将“org.hibernate.envers.global_with_modified_flag”设置为 true 并将“org.hibernate.envers.modified_flag_suffix”设置为“Modified”,则 Envers 会正确地为该表中具有指定后缀的所有列添加列,但它还希望为每个关联找到一个修改后的列,即使它们归外国方所有。
在下面的例子中,Envers 期望 A 中的列是“foo”、“fooModified”和“bObjectsModified”,而我认为它应该期望 A 中的“foo”和“fooModified”以及 B 中的“aIdModified”列。
@Entity
@Table("A")
@Audited
class A {
private String foo;
private Set<B> bObjects;
@Column(name = "foo")
public getFoo( return foo; )
@OneToMany(fetch = FetchType.LAZY,
mappedBy = "a")
public Set<B> getBObjects() { return bObjects; }
}
@Entity
@Table("B")
@Audited
class B {
private A a;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "aId")
public getA(){ return a; }
}
还有其他人看过吗?除了用@Audited(withModifiedFlag=false) 注释我的每一个@ManyToOne 关系之外,我如何改变这种行为。我有成千上万的关系,所以即使测试那部分也会是一个巨大的痛苦。
另一种方法是强制数据库了解有关我们的 Java 代码的详细信息,而这些细节是业务不知道的,这使得添加双向关联变得更加困难。
【问题讨论】:
标签: java hibernate hibernate-envers