我有三张 table :
CREATE TABLE IF NOT EXISTS `DB`.`global_history` (
`ID` INT(11) AUTO_INCREMENT,
`ID_HISTORY` INT(11) NULL,
PRIMARY KEY (`ID`),
CONSTRAINT `FK_HISTORY_GLOBAL_HISTORY`
FOREIGN KEY (`ID_HISTORY`)
REFERENCES `DB`.`history` (`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
第二个表:
CREATE TABLE IF NOT EXISTS `DB`.`history` (
`ID` INT(11) AUTO_INCREMENT,
`TIMESTAMP` DATETIME NOT NULL,
PRIMARY KEY (`ID`));*
第三个表:
CREATE TABLE IF NOT EXISTS `DB`.`audit` (
`ID` INT(11) AUTO_INCREMENT,
`ID_HISTORY` INT(11) NULL,
PRIMARY KEY (`ID`),
CONSTRAINT `FK_HISTORY_AUDIT`
FOREIGN KEY (`ID_HISTORY`)
REFERENCES `DB`.`history` (`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
这些是我的模型类:
全局历史:
@ManyToOne
@JoinColumn(name = "ID_HISTORY", nullable = true)
private History history;
历史:
@OneToMany(mappedBy = "history", fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
@Fetch(value = FetchMode.SUBSELECT)
@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE })
private List<GloabalHistory> globalHistories;
@ManyToOne
@JoinColumn(name = "ID_AUDIT", nullable = true)
private Audit audit;
审核:
@OneToMany(mappedBy = "audit", fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
@Fetch(value = FetchMode.SUBSELECT)
@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE })
private List<History> histories;
但是当我尝试更新历史记录(第二个表)中的一行时,我收到此错误:
--> Cannot delete or update a parent row : a foreign key constraint fails
最佳答案
您需要在所有一对多关系中使用cascade = CascadeType.ALL
,并在服务类中使用@Transactional
注释并使用@Transactional(propagation) = Propagation.REQUIRED)
保存方法。并在 hibernate 或 Spring 配置上启用事务。
关于java - 无法删除或更新双向关系中的父行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45573520/