1
netbeans 8.1ではエンティティとjpaコントローラを生成しました。 私は親エンティティと1対1の関係を持つ子を持っています。 子エンティティが主キーが親への外部キーに等しいがあります。これを避けるにはjpaで親例外を削除する
IllegalOrphanException: This Parent (model.Parent[ id=1 ]) cannot be destroyed since the Child model.Child[ parentId=1 ] in its child field has a non-nullable parent field.
私は最初の子を削除する必要がありますが、私は私が得る親を削除しようとすると
@Entity
@Table(name = "parent")
@XmlRootElement
public class Parent implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "parent")
private Child child;
public Parent() {
}
etc....
}
@Entity
@Table(name = "child")
@XmlRootElement
public class Child implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "parent_id")
private Integer parentId;
@JoinColumn(name = "parent_id", referencedColumnName = "id", insertable = false, updatable = false)
@OneToOne(optional = false)
private Parent parent;
public Child() {
}
etc....
}
それはカスケードのためです。それはすでに自動的に行われるべきです。子クラスのコーディング
につながる
ようになり、次のようにそれを制御し、双方向の関係です子供の側で、最初の質問は、リファレンスセットですか? JPAは、参照を維持している場合にのみ参照をカスケードできます。削除する前に親参照でem.refreshを呼び出すと、子インスタンスを作成するときにparent.child参照が設定されていることを確認してください。 – Chris
作成時にparent.child参照を設定すると、「EntityNotFoundException:Entity for ID:1を見つけることができませんでした」というメッセージが表示されます。 – blob
私は理解していません、それを永続化する前に子エンティティを見つけようとしていますか?おそらく親インスタンスがあり、子を作成しているので、それをルックアップする必要はありません。 child.parent = parentを設定すると、parent.child = childも設定されます。 – Chris