gpt4 book ai didi

sql - 无法删除或更新父行 - 使用 Hibernate 的 JPA

转载 作者:行者123 更新时间:2023-11-29 02:37:18 25 4
gpt4 key购买 nike

我有一个数据库,其中的所有表都是由 Java JPA/Hibernate 代码生成的。我需要以类似于此的方式更新数据库中的几个表,

UPDATE Department SET id=100000 WHERE id=0;

不幸的是,这会导致错误

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (departmentuserlink, CONSTRAINT FK96AF44EAB09C41C5 FOREIGN KEY (department_id) REFERENCES department (id))

这是 Java 实体:

@Entity
@Table(name="Department")
public class Department extends AbstractEntity implements IAbstractEntity {

@OneToMany(cascade=CascadeType.ALL, mappedBy="department", fetch=FetchType.EAGER)
private Set<DepartmentJobLink> departmentJobs = new HashSet<DepartmentJobLink>(0);

//Setters & getters and all that
}



@Entity
@Table(name="edrDepartmentJobLink", uniqueConstraints={@UniqueConstraint(columnNames={"department_id", "job_id"})})
public class DepartmentJobLink extends AbstractEntity implements IAbstractEntity {

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="department_id", nullable=false)
private Department department;

//Setters & getters and all that
}

它们在父类(super class)中都有 ID。到目前为止,看起来他们的其他一切都很好,只是在更新 Department 的主键时遇到了麻烦。我将不胜感激任何建议。谢谢。

最佳答案

那么,正在更新的表有哪些外键?听起来您不能更改 department.id 的值,因为其他一些表在其指向 department.iddepartment_id 列上有外键约束.

这实际上是“一件好事”,因为这意味着您的数据是可靠的。

您需要更改更新语句,以便同时更新受影响表的 department_id 列以及 department.id(以及任何其他受影响的表),或者您可以选择 ALTER 外键约束,以便级联更改。执行此操作的语法会因您的数据库实现而异。

这实际上与 JPA 或 Hibernate 没有任何关系 - 它纯粹是数据库中声明的外键约束的结果(这可能来自 Hibernate 映射并从 Hibernate 模式自动生成数据库模式生成器工具,但现在无关紧要)。

关于sql - 无法删除或更新父行 - 使用 Hibernate 的 JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3313303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com