MySQLIntegrityConstraintViolationException: невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполнено - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть отношение 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))

Что я делаю не так?

...