1

Order(親)で削除を実行するとき、hibernateは子をカスケード削除しようとしています。最初に子を削除するのではなく、外部キーを無効にしてから親を削除してから、子を削除しようとします。

最初に子を削除し、次に親を削除できるように構成を変更する方法はありますか?外部キーを無効にするステップをバイパスしますか?

表と関連する列

注文

id-PK、int、nullではない

OrderResult

id-PK、int、nullではないorder_id-FK、int、nullではない

エンティティの指定

注文

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "CLOrderID")
public List<OrderResult> getOrderResults() {
    return orderResults;
}

OrderResult

@ManyToOne
@JoinColumn(name = "CLOrderID", nullable = false)
public Order getOrder() {
    return order;
}
4

1 に答える 1

0

コードの問題は、Cascade DELETE が適切に設定されていることです。そのため、User を削除すると、DELETE アクションはカスケードされません。つまり、OrderResult も削除されます。代わりに、Order が削除されたため、参照値を NULL に設定して OrderResult を更新します。

それを修正するには、Orderクラスを変更します。

@OneToMany(cascade = CascadeType.ALL, mappedBy="order")
public List<OrderResult> getOrderResults() {
    return orderResults;
}

それが役立つことを願っています。

于 2012-09-17T09:54:24.663 に答える