私はPostgresql上でHibernateとEnvers3.6.10を使用しています。次のように、エンティティAとBOneToMany
の間を使用して双方向の関係をマッピングしました。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
}
を介してBのセットを持つAエンティティを永続化する場合は問題ありませんsave()
。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には特別な設定が必要です。これを管理するには?
よろしくお願いします。