Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:无法删除对象-外键约束-CascadeType.REMOVE_Java_Mysql_Hibernate_Jakarta Ee_Jpa - Fatal编程技术网

Java Hibernate:无法删除对象-外键约束-CascadeType.REMOVE

Java Hibernate:无法删除对象-外键约束-CascadeType.REMOVE,java,mysql,hibernate,jakarta-ee,jpa,Java,Mysql,Hibernate,Jakarta Ee,Jpa,我有两个持久实体Obj1和Obj2。Obj2包含对Obj的引用,如下所示。Obj1中没有对Obj2的引用(代码级别为Java) public class Obj2{ .... @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE}, optional = true) private Obj1 obj1; 我按照建议使用@OneToMany更新了O

我有两个持久实体Obj1和Obj2。Obj2包含对Obj的引用,如下所示。Obj1中没有对Obj2的引用(代码级别为Java)

public class Obj2{
....
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE}, optional = true)
private Obj1 obj1;
我按照建议使用@OneToMany更新了Ojbj 1:

public class Obj1{

....

    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE,CascadeType.ALL},orphanRemoval = true)
    private List<Obj2> obj2;
由于外键的限制,它失败了

00:35:23,109 WARN  [com.arjuna.ats.arjuna] (http--127.0.0.1-8080-1) ARJUNA012125: TwoPhaseCoordinator.beforeCompletion - failed for SynchronizationImple< 0:ffff7f000101:-7f20c644:5369716f:26, org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization@dcedf7 >: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`my_db`.`obj2`, CONSTRAINT `FKC4783505BB5D6339` FOREIGN KEY (`obj1_pk`) REFERENCES `obj1` (`pk`))
...
... 94 more
Caused by: org.hibernate.exception.ConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`my_db`.`obj2`, CONSTRAINT `FKC4783505BB5D6339` FOREIGN KEY (`obj1_pk`) REFERENCES `obj1` (`pk`))

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`my_db`.`obj2`, CONSTRAINT `FKC4783505BB5D6339` FOREIGN KEY (`obj1_pk`) REFERENCES `obj1` (`pk`))
00:35:23109警告[com.arjuna.ats.arjuna](http--127.0.0.1-8080-1)ARJUNA012125:TwoPhaseCoordinator.before completion-同步失败imple<0:ffff7f000101:-7f20c644:5369716f:26,org.hibernate.engine.transaction.synchronization.internal。RegisteredSynchronization@dcedf7>:javax.persistence.PersistenceException:org.hibernate.exception.ConstraintViolationException:无法删除或更新父行:外键约束失败(`my_db`.`obj2`,约束`FKC4783505BB5DD6339`外键(`obj1_pk`)引用`obj1`(`pk`)
...
…还有94个
原因:org.hibernate.exception.ConstraintViolationException:无法删除或更新父行:外键约束失败(`my_db`.`obj2`,约束`fkc4783505bb5bd6339`外键(`obj1_pk`)引用`obj1`(`pk`)
原因:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(`my_db`.`obj2`,约束`fkc4783505bb5bd6339`外键(`obj1_pk`)引用`obj1`(`pk`)
我(看起来是错误的!)拆分了该级联类型。删除将处理此问题?我应该如何处理此删除


/T

手动处理或添加反向关系
@OneToMany(orphanRemoving=true)
在Obj1中。

您什么时候添加了
optional=true
?是在部署应用程序之前还是之后?如果是之后,MySQL不会更新
my_db
上的NotNull约束,请检查列
Obj1_pk
是否可以为空。如果不是,请删除并添加约束
FKC4783505BB556339
因此它可以为空。
或者,您可以简单地删除这两个表并重新创建它们。

感谢大家的帮助……我通过(某种程度上)结合这两条建议来做到这一点,并且我更改了外键,以便它在删除时级联。

我按照建议添加了@OneToMany(请参见上面更新的代码),但由于同样的原因,它仍然失败无法删除或更新父行:外键约束失败…约束。。。"你确定DB表之间没有其他关系吗?我稍后会确认。可能是我引入@ONeToMany之前存在的FK约束仍然导致了问题?是的,这似乎是问题所在。我不能删除任何表,因为我必须将此功能添加到现有的数据库中。你可以调整FK rel在不删除数据库的情况下,列my_db.obj2.obj1_pk是否可以为null?它应该可以为null,因为OPTIONAL为true,异常由Mysql触发,修改您的约束,它应该可以工作。
00:35:23,109 WARN  [com.arjuna.ats.arjuna] (http--127.0.0.1-8080-1) ARJUNA012125: TwoPhaseCoordinator.beforeCompletion - failed for SynchronizationImple< 0:ffff7f000101:-7f20c644:5369716f:26, org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization@dcedf7 >: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`my_db`.`obj2`, CONSTRAINT `FKC4783505BB5D6339` FOREIGN KEY (`obj1_pk`) REFERENCES `obj1` (`pk`))
...
... 94 more
Caused by: org.hibernate.exception.ConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`my_db`.`obj2`, CONSTRAINT `FKC4783505BB5D6339` FOREIGN KEY (`obj1_pk`) REFERENCES `obj1` (`pk`))

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`my_db`.`obj2`, CONSTRAINT `FKC4783505BB5D6339` FOREIGN KEY (`obj1_pk`) REFERENCES `obj1` (`pk`))