У меня возникает проблема ограничения при попытке удалить объект, содержащий отношения OneToMany, которые не должны происходить. Я установил cascade = CascadeType.ALL
, попытался добавить аннотацию @Cascade
Hibernate, попытался перестроить новую базу данных, и даже создал минимальный пример, под которым все сбой.Каскадирование не работает при удалении с помощью Spring Data JPA Repositories
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 Bar {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne
private Foo foo;
// Constructor, getters and setters omitted
}
класса, содержащего каскадные
@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
}
Тест:
// 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);
}
Это испытание терпит неудачу выше. Я ожидал, что удастся удалить Foo без необходимости удаления всех связанных объектов Bar, поскольку каскадирование было установлено в отношении OneToMany. Почему это не удается?
все еще имеют ту же ошибку с 'orphanRemoval'. –
также попробуйте 'foo.getBars() добавить (bar)' в свои тесты, чтобы убедиться, что двунаправленная связь установлена правильно. – Sergio
Это исправлено. Означает ли это, что мне нужно добавить ассоциации к обоим объектам для поддержания двунаправленных отношений? Я понял, добавил ли я объект 'Foo' в объект' Bar', он автоматически создаст двунаправленную связь. –