如何更新外键列?

时间:2018-01-26 06:17:49

标签: java mysql sql jpa foreign-keys

我有以下表格:

create table TABLE1 ( id int(10) unsigned NOT NULL AUTO_INCREMENT, deptId int(11) NOT NULL, DeptName varchar(32) NOT NULL, PRIMARY KEY (id), KEY Dept (deptId, DeptName))

create table TABLE2 ( id int(10) unsigned NOT NULL AUTO_INCREMENT, empId int(11) NOT NULL, DeptName varchar(32) NOT NULL, PRIMARY KEY (id), KEY DeptName (DeptName), CONSTRAINT T2FK FOREIGN KEY (DeptName) REFERENCES TABLE1 (DeptName))

TABLE1有一个用dept id和dept名称定义的MUL键。 TABLE2有一个外键,它只引用TABLE1的Dept名称

TABLE2的DTO创建如下:

@org.hibernate.annotations.NotFound(action = org.hibernate.annotations.NotFoundAction.IGNORE)
   @javax.persistence.ManyToOne(targetEntity = org.amru.persistence.dto.TABLE1DTOImpl.class, fetch=javax.persistence.FetchType.EAGER)
   @javax.persistence.JoinColumn(name = "deptName")
   public org.amru.persistence.dto.TABLE1DTO getTABLE1() {
      return TABLE1;
   } 

当我尝试在TABLE2中插入一行时,它会因外键约束违例异常而失败。

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`amru`.`TABLE2`, CONSTRAINT `T2FK` FOREIGN KEY (`DeptName`) REFERENCES `TABLE1` (`DeptName`))

我调试时也看到了EntityExistsException

可能有什么问题?是否建议将MUL键的一部分作为外键引用到另一个表中?

我正在使用jpa,hibernate,jboss,ejb和mysql

1 个答案:

答案 0 :(得分:0)

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 
Cannot add or update a child row: a foreign key constraint fails
  

可能有什么问题?

非常明确的是,DeptNameTABLE2中的外键,它来自TABLE1。因此,在其他表中引用数据时,不允许更改父表中的值。

如果您应该这样做,那么您需要更改表格以将级联更改应用于子表以及Foreign Key

FOREIGN KEY (DeptName) REFERENCES TABLE1 (DeptName) ON DELETE CASCADE ON UPDATE CASCADE