java - 无法添加或更新子行:尝试保存实体及其关系实体时出现外键约束失败错误
问题描述
好吧,我的数据库中有以下表格:
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;
当我创建一个 Movie 对象并设置所有属性(包括一个 Actor)并调用 save 方法时,我得到:“无法添加或更新子行:外键约束失败(movieow
. actor_movie
, CONSTRAINT FKsc6u9gs0762qyrnyfwp9d5q2b
FOREIGN KEY ( movie_id
) REFERENCES actor
( actor_id
))”
我想当我保存一个 Movie 对象时,它会级联地保存 actor 和 actor_movie 表。
我究竟做错了什么?
解决方案
这听起来像是不同实体不同步的问题(我没有针对您的情况进行测试)。这个想法是为您的集合创建添加和删除方法,这些方法在相应的关联对象中添加或删除实体。有关@ManyToMany
关系的明确示例,您可以查看Vlad Mihalcea 关于这些关系的文章。关于同步和级联,他还写了一篇文章。
推荐阅读
- java - okhttp缓存:如何在网络连接中先获取缓存数据然后获取网络数据?
- sql-server - 无法使用 odbc 驱动程序 17 将数据插入加密列
- python - 按索引列表为每一行选择熊猫列
- java - 构造函数 csvreader(reader char) 已弃用错误
- android - 更改语言后不显示 Admob 广告
- javascript - 将字符串转换为对象键超过 2depths
- webpack - Webpack dll 参考插件给出运行时错误
- javascript - 选择文本时显示工具提示
- python - 更改按钮文本 MessageBox
- text-mining - 如何解决情感分析中的歧义?