EJB3 を使用してモデル化しているレガシー データベースがあります。データベースは非常に貧弱な状態にあり、DB への挿入方法には異常な制限があります。ここで、DB 構造に適合する階層でデータベースをモデル化したいと考えていますが、永続化マネージャーがエンティティの子を永続化しようとせずに、各エンティティを個別に手動で挿入できるようにしたいと考えています。
私は次のようなことを試みています(ボイラープレートは省略されています):
@Entity
@Table(name = "PARENT_TABLE")
public class Parent {
@Id
@Column(name = "ID")
int id;
@OneToMany
List<Child> children;
}
@Entity
@Table(name = "CHILD_TABLE")
public class Child {
@Id
@Column(name = "ID")
int id;
}
これで例外がスローされます。
java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST
これで、エンティティが PERSIST とマークされていないことがわかりました - EntityManager に永続化させたくありません! 最初に親を永続化し、次に子を永続化できるようにしたいのですが、一緒ではありません。このようにしたいのには十分な理由がありますが、遊びたくないようです。