У меня есть отношение ManyToOne: много сеансов к одному залу.
@Entity
@Data
@NoArgsConstructor
@EqualsAndHashCode(of = {"id"})
public class Session {
//...some params
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "hall_id")
private Hall hall;
}
@Entity
@Data
@NoArgsConstructor
@EqualsAndHashCode(of = {"id"})
public class Hall {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
private String name;
}
Я хочу удалить сеансы, выполнив следующее: переберите все сеансы, очистите некоторые данные, затем установите для Холла значение null - что используетсякак внешний ключ.
@Transactional(propagation = Propagation.REQUIRED)
public void clearSessions(List<Session> sessions) {
sessions.forEach(s -> {
s.getSessionViewers().clear();
s.getMessages().clear();
s.setHall(null);
sessionRepository.delete(s);// Error here <---
});
}
Но у стали есть ошибка: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполняется (mydb
. session
, ОГРАНИЧЕНИЕ FK14qoadsfdvgkbld832ddaDDk
ИНОСТРАННЫЙ КЛЮЧ (hall_id
) ССЫЛКИ hall
(id
))
Что я делаю не так?