我在Postgresql上使用Hibernate和Envers 3.6.10。我已经使用实体A和B之间的JoinTable
映射了一个OneToMany
双向关系,如下所示。Envers在双向OneToMany中使用JoinTable插入空ID
类A:B
@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
}
类别:
@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需要一些特殊的配置。管理这个?
此致敬礼。
我可以证实这个问题。 – 2016-03-29 14:04:41
尚未解决,因为您可以在JIRA上看到[HHH-8305](https://hibernate.atlassian.net/browse/HHH-8305) – hespresati 2016-03-30 06:23:44
此错误现已在最新的Hibernate版本中解决。更多关于[JIRA HHH-8305](https://hibernate.atlassian.net/browse/HHH-8305)的信息 – hespresati 2016-06-23 12:57:24