Jpa 2.0 孤立删除约束冲突

Jpa 2.0 孤立删除约束冲突,jpa-2.0,eclipselink,cascade,orphan,Jpa 2.0,Eclipselink,Cascade,Orphan,我正在使用EclipseLink并拥有以下实体类(我尝试尽可能简化场景,但在进一步简化后,错误不会发生): 有谁能向我解释一下,为什么在C实例之前D_C条目没有被删除?添加@CascadeOnDelete可以解决您的问题 @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @CascadeOnDelete @Size(min = 1) public Set<TestChild> childrenSet = new H

我正在使用EclipseLink并拥有以下实体类(我尝试尽可能简化场景,但在进一步简化后,错误不会发生):


有谁能向我解释一下,为什么在C实例之前D_C条目没有被删除?

添加@CascadeOnDelete可以解决您的问题

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@CascadeOnDelete
@Size(min = 1)
public Set<TestChild> childrenSet = new HashSet<TestChild>();
@OneToMany(cascade=CascadeType.ALL,orphan=true)
@级联删除
@尺寸(最小值=1)
public Set childrenSet=new HashSet();
另见:


HTH Danny

包括类和映射。在finest上设置logging也会显示发生了什么。你能显示你的C->D映射吗?如果你直接删除C,它会发生吗?将类从pastebin移动到posting。当我在没有A的情况下存储星座并直接删除BImpl实例时,不会发生错误(删除被级联到D,C和D_C项在C实例之前被删除)。当BImpl不是从抽象类继承并被A直接引用时也是如此。我尝试了5种不同的方法来解决这个问题,但我发现,使用@CascadeOnDelete是唯一有用的解决方法。
20:05:03,388 INFO  [STDOUT] [EL Fine]: 2012-04-13 20:05:03.388--ClientSession(2132156535)--Connection(1281180651)--Thread(Thread[http-0.0.0.0-443-2,5,jboss])--UPDATE A SET B_ID = ? WHERE (ID = ?)
20:05:03,388 INFO  [STDOUT]     bind => [null, 1]
20:05:03,390 INFO  [STDOUT] [EL Fine]: 2012-04-13 20:05:03.39--ClientSession(2132156535)--Connection(1281180651)--Thread(Thread[http-0.0.0.0-443-2,5,jboss])--DELETE FROM BIMPL WHERE (ID = ?)
20:05:03,390 INFO  [STDOUT]     bind => [2]
20:05:03,391 INFO  [STDOUT] [EL Fine]: 2012-04-13 20:05:03.391--ClientSession(2132156535)--Connection(1281180651)--Thread(Thread[http-0.0.0.0-443-2,5,jboss])--DELETE FROM ABSTRACTB WHERE (ID = ?)
20:05:03,391 INFO  [STDOUT]     bind => [2]
20:05:03,392 INFO  [STDOUT] [EL Fine]: 2012-04-13 20:05:03.392--ClientSession(2132156535)--Connection(1281180651)--Thread(Thread[http-0.0.0.0-443-2,5,jboss])--DELETE FROM C WHERE (ID = ?)
20:05:03,393 INFO  [STDOUT]     bind => [4]
20:05:03,393 INFO  [STDOUT] [EL Fine]: 2012-04-13 20:05:03.393--ClientSession(2132156535)--Thread(Thread[http-0.0.0.0-443-2,5,jboss])--SELECT 1
20:05:03,394 INFO  [STDOUT] [EL Warning]: 2012-04-13 20:05:03.394--UnitOfWork(2142376869)--Thread(Thread[http-0.0.0.0-443-2,5,jboss])--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException
20:05:03,394 INFO  [STDOUT] Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`db`.`D_C`, CONSTRAINT `FK_D_C_cs_ID` FOREIGN KEY (`cs_ID`) REFERENCES `C` (`ID`))
20:05:03,394 INFO  [STDOUT] Error Code: 1451
20:05:03,395 INFO  [STDOUT] Call: DELETE FROM C WHERE (ID = ?)
20:05:03,395 INFO  [STDOUT]     bind => [4]
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@CascadeOnDelete
@Size(min = 1)
public Set<TestChild> childrenSet = new HashSet<TestChild>();