【发布时间】:2013-03-15 04:14:24
【问题描述】:
我在 Postgresql 上使用 Hibernate 和 Envers 3.6.10。我在实体 A 和 B 之间使用JoinTable 映射了OneToMany 双向关系,如下所示。
A 类:
@Entity
@Audited
public class A {
// Other stuff
@OneToMany()
@Cascade(CascadeType.ALL)
@LazyCollection(LazyCollectionOption.TRUE)
@JoinTable(name = "A_B", joinColumns = { @JoinColumn(name = "A_ID") }, inverseJoinColumns = { @JoinColumn(name = "B_ID") })
private Set<B> setOfBs;
// Getters + Setters + HashCode + Equals
}
B 类:
@Entity
@Audited
public class B {
// Other stuff
@ManyToOne(optional=true)
@LazyCollection(LazyCollectionOption.TRUE)
@JoinTable(name = "A_B", joinColumns = { @JoinColumn(name = "B_ID") }, inverseJoinColumns = { @JoinColumn(name = "A_ID") })
private A a;
// Getters + Setters + HashCode + Equals
}
通过save() 持久化具有一组 B 的 A 实体没有问题。即使没有明确设置 B 和 A 之间的双向关系。当 Envers 进行插入以将修订保存在 JoinTable aud 表中时出现此异常:
Hibernate: insert into a_b_AUD (a_id, b_id, REV) values (?, ?, ?)
16:27:38,051 TRACE BasicBinder:70 - binding parameter [1] as [BIGINT] - <null>
16:27:38,051 TRACE BasicBinder:82 - binding parameter [2] as [BIGINT] - 2038
16:27:38,051 TRACE BasicBinder:82 - binding parameter [3] as [INTEGER] - 2039
16:27:38,056 WARN JDBCExceptionReporter:233 - SQL Error: 0, SQLState: 23502
16:27:38,056 ERROR JDBCExceptionReporter:234 - ERROR: null value in column «a_id» violates not null restriction
如果我在 Hibernate 中设置完整的调试模式,我可以看到 Envers“知道”该 Id,但没有将其传递给插入。我该如何解决这个问题?关系是否正确映射? Envers 需要一些特殊的配置。管理这个?
最好的问候。
【问题讨论】:
-
我可以确认这个问题。
-
如您在 JIRA HHH-8305 上看到的,它尚未解决
-
这个错误现在在最新的 Hibernate 版本中得到解决。更多信息JIRA HHH-8305
标签: hibernate hibernate-envers