Давайте предположим, что эти две сущности:
@Entity
public class MyEntity {
@Id private String id;
@OneToMany(mappedBy = "myEntity", cascade = ALL) private Set<MyEntityPredecessor> predecessors;
}
@Entity
public class MyEntityPredecessor{
@Id private String id;
@ManyToOne(name = "entityID", nullable = false) private MyEntity myEntity;
@ManyToOne(name = "entityPre", nullable = false) private MyEntity predecessor;
}
Когда я пытаюсь вызвать удаление с помощью Spring Boot Data (JPA) с экземпляром MyEntity, оно будет работать несколько раз (я вижу select изатем операторы удаления в правильном порядке), но иногда он пытается запустить обновление для второй сущности, пытаясь установить для поля «entityPre» значение null (даже если оно установлено в nullable = falsE), в результате чего БД отправляетошибка (ноль не допускается !! из ограничения БД).
Странно, это будет происходить при "случайных" вызовах удаления ...
Я просто вызываю "myEntityRepository.getOne (id)", а затем myEntityRepository.delete () с результатом... В базе данных нет разницы между вызовами, структура данных не имеет нулевых значений при вызове метода удаления, поэтому это не должно быть причиной.
Почему JPA иногда пытается вызвать обновления в Таблице предшественников, а иногда напрямую удаляет значения? Я что-то упустил?