私達持っている私たちは、新しいBエンティティを追加したい、次のエンティティ階層とエンティティリスナーでEntityListenerEnversは - EntityListener @PreUpdateにoneToManyコレクションに新しい要素を追加
@Entity
@EntityListeners(value = DummyListener.class)
@Audited
public class A {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "a", fetch = FetchType.LAZY, orphanRemoval = true)
@Fetch(FetchMode.SELECT)
private Set<B> bs = new LinkedHashSet<B>(0);
}
@Entity
@Audited
public class B {
@ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE, CascadeType.PERSIST })
@JoinColumn(name = "a_id", nullable = false)
private A a;
}
public class DummyListener {
@PreUpdate
public void beforeUpdate(A entity) {
entity.set...(...);
...
B old = entity.getBs().iterator().next();
old.set...(...);
...
B b = new B();
b.setA(entity);
entity.getBs().add(b);
...
}
}
エンティティコレクション。しかし、Aを保存した後、エンバーはB監査テーブルの新しいBインスタンスの監査レコードを作成しませんでした。 他のすべての変更には、新しいBインスタンスを除く監査レコードがあります。
何が間違っていますか?このようにしてBの新しいインスタンスを作成することは可能ですか? JPA仕様2.1当たり
お返事ありがとうございます!また、私はJPAの文書化の答えを得たので、トリガーのようなメソッドを作成する別の方法を見つけるか、またはロジックを別のサーバー側のイメージメートに移動する必要があります。 – SeniorRoland