java - 无法删除或更新双向关系中的父行

标签 java mysql hibernate jpa

我有三张 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/

相关文章:

java - 调用 LayoutInflater 的方法而不创建对象

java - 如何获取主类的 Java 类依赖项列表?

mysql - 我的查询正确吗?是否存在可以检查我的查询的网站?

python - 无法为 Django 和 Mysql 启动 docker 构建

java.lang.NoSuchMethodError : javax. persistence.Table.indexes()[Ljavax/persistence/Index;

java - 如何在 Intellij 构建上生成 jaxb2 类?

java - 编写一个接受 int n 并返回小于 n 的奇数之和的函数

mysql - DataSource maxActive在tomcat mysql中没有变化

hibernate - @Autowired lateinit 属性 '' 尚未初始化

java - Hibernate 未从数据库中获取最新插入的记录