1

データベースからエンティティを削除できませんでした。私は2つのクラスを持っています.1つはレシートで、もう1つはサービングです. 領収書あり

    @ElementCollection
@OneToMany(cascade={CascadeType.ALL}, orphanRemoval=true)
public List<Serving> servings;

そして、コントローラーからサービングを削除しようとしています。

Serving serving = Serving.findById(servID);
serving.delete();

結果は次のとおりです。

実行例外 PersistenceException が発生しました: org.hibernate.exception.ConstraintViolationException: JDBC バッチ更新を実行できませんでした

4

2 に答える 2

4

何かのようなもの:

Receipt receipt = serving.getReceipt();
receipet.setServings(receipt.getServings().remove(serving));

レシートはサービングのOO所有者であるため、OOの観点から、レシートはサービングがいつ削除されるかを知る必要があります。

たぶん、ReceiptにServingまたはservingIdのいずれかのファインダーを作成します。

(サービングは、それがどのレシートに属しているかを知らないはずですか?-orphanRemovalは、サービングが実際に1つのレシートに属していることを示しているようです)

于 2012-06-05T14:33:57.553 に答える
2

残りのスタック トレースを読むと、違反している制約の名前が見つかるはずです。削除しようとしているサービングを参照している他のエンティティがある可能性があります (つまり、削除しようとしているサービング行への外部キーを持つ他の行)。

したがって、このエンティティを削除できるようにするには、外部キーを介してエンティティを参照しているすべてのエンティティがそれを参照していないことを確認する必要があります。それを行う方法は、これらがどのエンティティであるか、Serving との関係がどのように実装されているか、および何をしたいかによって異なります。関連付けを削除するか、参照しているエンティティも削除します。

于 2012-06-05T14:30:32.607 に答える