2017-02-22 5 views
1

OneToMany関係を含むオブジェクトを削除しようとしたときに、制約の問題が発生しています。私はcascade = CascadeType.ALLを設定し、Hibernate固有の@Cascade注釈を追加しようとしました。新しいデータベースを再構築しようとしましたが、その下の最小限の例を作成しました。SpringデータJPAリポジトリでのカスケードの削除JPNリポジトリ

Cannot delete or update a parent row: a foreign key constraint fails (`test-db`.`bar`, CONSTRAINT `FKdvoqij212wwl2bf14kwo55h55` FOREIGN KEY (`foo_id`) REFERENCES `foo` (`id`)) 

@Entity 
public class Foo { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    @OneToMany(mappedBy = "foo", cascade = CascadeType.ALL, orphanRemoval = true) 
    private List<Bar> bars; 

    // Constructor, getters and setters omitted 
} 

テスト

カスケード含有

@Entity 
public class Bar { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    @ManyToOne 
    private Foo foo; 

    // Constructor, getters and setters omitted 
} 

クラスカスケード接続対象物:

// Spring Data JPA Repositories (extend CrudRepository) 
@Autowired private FooRepository fooRepository; 
@Autowired private BarRepository barRepository; 

@Test 
public void test() { 
    final Foo foo = new Foo(); 
    fooRepository.save(foo); 

    final Bar bar = new Bar(); 
    bar.setFoo(foo); 
    barRepository.save(bar); 

    fooRepository.delete(foo); 
} 

この試験は、上記の失敗を。私はカスケードがOneToMany関係で設定されているので、関連するすべてのBarオブジェクトを削除することなくFooを削除できることを期待しています。なぜこれは失敗するのですか?

答えて

1

try @OneToMany(mappedBy = "foo", cascade = CascadeType.ALL, orphanRemoval = true)

+0

「orphanRemoval」にも同じエラーがあります。 –

+0

また、 'foo.getBars()。add(bar)'をテストして、双方向関係が適切に確立されていることを確認してください。 – Sergio

+0

それはそれを修正しました。これは、両方向の関係を維持するために、両方のオブジェクトに関連付けを追加する必要があることを意味しますか? 'Foo'オブジェクトを' Bar'オブジェクトに追加すると、自動的に双方向関係が作成されます。 –

関連する問題