を削除する前に関係をリフレッシュしますは、どのように私はこのように設定する別のものと@OneToMany関係を持つエンティティを削除したいエンティティ
public class Dealership implements Serializable {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "dealership", orphanRemoval = true)
private Set<Car> cars;
}
public class Car implements Serializable {
@ManyToOne
@JoinColumn(name="co_id")
private Dealership dealership;
}
事があり、その私がディーラーを削除すると、I販売されていない車のみを削除したいそして私が何を試みても、Hibernateはカスケードを通じてディーラーと結んだすべての車を削除します。ここで私が試してきたものがあります。この例では、販売した車を別のディーラーに譲渡しようとしていますが、ディーラーを削除します。
Session session = SessionManager.getSession();
Transaction tx = session.beginTransaction();
Dealership dealershipToDelete = (Dealership) session.load(Dealership.class, idDealership);
for(Car c: dealershipToDelete.getCars().stream().filter(c -> c.isSold()).toArray(Car[]::new)){
Dealership newDealership = (Dealership) session.load(Dealership.class, idNewDealership);
c.setDealership(newDealership);
dealershipToDelete.getCars().remove(c);
}
session.update(dealershipToDelete);
session.flush();
session.delete(dealershipToDelete);
tx.commit();
session.close();
しかし、それは常にすべての車を削除します。これは、販売代理店、従業員、および販売されていなかった車のみを削除することになっています。私がHibernateに新しいディーラーと車をアップデートさせるようにしても。それらを更新し、削除します。ヘルプは非常に高く評価されます。ありがとう。
あなたは新しいディーラーに車を追加していません。あなたは古いディーラーから車を取り外すことはありません。 –
申し訳ありませんが、古いディーラーから車を取り外したラインを追加するのを忘れました。私はこれを投稿する前にすでにテストしました。それでも動作しません。 私は新しい関係にこれを追加しませんでした。しかし、今、私は(それの終わりに)ループにこの行を追加したこと:。 'newDealership.getCarsを()(c)を追加;' それは、この例外がスローされます:スレッド「メイン」組織で 例外。 hibernate.ObjectDeletedException:削除されたオブジェクトはカスケード(削除されたオブジェクトを関連付けから削除)で再保存されます:[hibernate.entities.Car#14] – MatiasP
@MatiasMGSはあなたの問題を解決しましたか? –