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を削除できることを期待しています。なぜこれは失敗するのですか?
「orphanRemoval」にも同じエラーがあります。 –
また、 'foo.getBars()。add(bar)'をテストして、双方向関係が適切に確立されていることを確認してください。 – Sergio
それはそれを修正しました。これは、両方向の関係を維持するために、両方のオブジェクトに関連付けを追加する必要があることを意味しますか? 'Foo'オブジェクトを' Bar'オブジェクトに追加すると、自動的に双方向関係が作成されます。 –