我在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