Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа завершается ошибкой при попытке сохранить сущность и ее реляционную сущность - PullRequest
0 голосов
/ 03 февраля 2020

Ну, у меня есть следующие таблицы в моей базе данных:

CREATE TABLE movie (
movie_id INTEGER NOT NULL AUTO_INCREMENT,
translated_title VARCHAR(150),
original_title VARCHAR(150),
plot MEDIUMTEXT,
genre VARCHAR(150),
country VARCHAR(250),
language VARCHAR(100),
upvotes INTEGER,
premiere_year INTEGER(4),
duration_minutes Integer,
CONSTRAINT movie_pk PRIMARY KEY (movie_id));

CREATE TABLE actor (
actor_id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(150),
nationality VARCHAR(150),
born_date DATE,
CONSTRAINT actor_pk PRIMARY KEY (actor_id));

CREATE TABLE actor_movie (
actor_id INTEGER,
movie_id INTEGER,
FOREIGN KEY (actor_id) REFERENCES actor (actor_id) ON DELETE CASCADE,
FOREIGN KEY (movie_id) REFERENCES movie (movie_id) ON DELETE CASCADE);

и следующие объекты:

@Entity(name = "movie")
public class Movie implements Serializable {    

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "actor_movie",
        inverseJoinColumns  = { @JoinColumn(name = "actor_id", insertable = true, updatable = true)},
        joinColumns = { @JoinColumn(name = "movie_id", insertable = true, updatable = true) })
private Set<Actor> actors;

и:

@Entity(name = "actor")
public class Actor implements Serializable {

@ManyToMany(mappedBy="actors")
private Set<Movie> movies;

Когда я создать объект Mov ie и установить все свойства, включая Actor, и вызвать метод save, я получаю: «Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (movieow. actor_movie, CONSTRAINT FKsc6u9gs0762qyrnyfwp9d5q2b FOREIGN KEY (movie_id) ССЫЛКИ actor (actor_id)) "

Я хочу, чтобы при сохранении объекта Mov ie он каскадно сохранял таблицы actor и actor_mov ie .

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

1 Ответ

1 голос
/ 04 февраля 2020

Это звучит как проблема того, что разные объекты не синхронизированы (я не проверял это для вашего случая). Идея состоит в том, чтобы создать методы добавления и удаления для вашего набора, которые добавляют или удаляют объект в соответствующем связанном объекте. Для наглядного примера отношений @ManyToMany вы можете взглянуть на статью Влада Михалча об этих отношениях . О синхронизации и каскадировании он также написал статью .

...