2017-06-23 6 views
1

私のWebアプリケーションは、Spring、Spring Data、JPA(Hibernate)、およびMS SQLサーバー上に構築されています。私は2つのクラス/テーブルを持っています(マスターとディテール)。 Hhereは、それらが関連付けられている方法です。Criteria APIを使用して詳細レコードを削除できません

Detail: 

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "master") 
private Master master; 

Master: 

@OneToMany(mappedBy = "master", fetch = FetchType.LAZY,cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE}, orphanRemoval = true) 
private List<Detail> details; 

は、私は、このような削除(id_of_Master_object)として削除し、通常の春のデータを介してマスターオブジェクトを削除した場合(およびそれに関連する詳細は、縦続オブジェクト)マスターオブジェクトを削除することができています。私は、このエラーの性質を理解

The DELETE statement conflicted with the REFERENCE constraint "FK_t7dg2y38t1ddm1lrq94cnpk3x". The conflict occurred in database "mydatabase", table "dbo.Detail", column 'master'. 

は、今私はクライテリアAPIを介してマスタオブジェクトを削除するには、動的なクエリを構築する必要がある、私はエラーを得ました。修正は何ですか?上記のマッピングで何か間違っていますか?

データベースを再構築できません。アプリはすでに制作中です。可能であれば、データベースへの変更(例えば、テーブルの変更など)を避けたいと思います。

ありがとうございました!ここでは、このスレッドに来て誰のために

UPDATE

私の最終的な解決策が実装されている方法です。

  1. Micheleが提案した「削除するすべてのマスターを照会する」の後に続きます。それはコレクションです。

  2. repository.delete(the_collection)

この情報がお役に立てば幸いです。

答えて

1

これはスキーマの問題ではなく、削除基準がカスケードしないことです。

ですからが2つの選択肢が残されています。

  1. クエリ、削除したいすべてマスター、および反復的に1対1 詳細

  2. にカスケードを活用しての削除2つの条件の削除を実行します。最初は、詳細は、次はのマスター

+0

ありがとう、ミシェル! – curious1

関連する問題