Я использую Hibernate и Envers 3.6.10 поверх Postgresql. Я сопоставил двунаправленное отношение OneToMany
, используя JoinTable
между объектами A и B следующим образом.Включает ввод идентификатора null в двунаправленном OneToMany с JoinTable
Класс 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
}
Там нет никаких проблем, когда сохраняющиеся объект A с набором Bs через save()
. Даже без установки явно двунаправленную связь между B и A. Проблема появляется, когда Envers делает вставки, чтобы сохранить ревизию в таблице JoinTable
ауд получаю это исключение:
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
Если установить режим полной отладки в спящем I может видеть, что Envers «знает» этот Id, но не передает его во вставку. Как я могу решить эту проблему? Правильно ли сопоставлено отношение? Для Envers нужна специальная конфигурация. управлять этим?
С уважением.
Я могу подтвердить эту проблему. –
Он еще не разрешен, как вы можете видеть на JIRA [HHH-8305] (https://hibernate.atlassian.net/browse/HHH-8305) – hespresati
Эта ошибка теперь разрешена в последних версиях Hibernate. Дополнительная информация о [JIRA HHH-8305] (https://hibernate.atlassian.net/browse/HHH-8305) – hespresati