parent:staffGroup
@Entity
@Table( name = "STAFF_GROUP")
public class StaffGroup implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@OneToMany(mappedBy="staffGroup", cascade = CascadeType.ALL)
private List<Staff> staffs = new ArrayList<>();
孩子:工作人员
@Entity
@Table( name = "STAFF")
public class Staff implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
// Relationships
@ManyToOne
@JoinColumn(name = "STAFF_GROUP_ID")
private StaffGroup staffGroup;
这是一个使用JPA和MySQL作为数据库的Javafx应用程序。
我为每个实体(工作人员和人员组)都有一个DAO。和这样的逻辑课,称为STOUPTGATE:
public class StaffGate {
// GRP
private List<StaffGroup> staffGrps = new ArrayList<>();
private StaffGroupDAO groupDAO = new StaffGroupDAO();
// Staff
private static List<Staff> staffList = new ArrayList<>();
private StaffDAO staffDao = new StaffDAO();
public void removeFromDBAndMemory(StaffGroup element) {
groupDAO.remove(element);
staffGrps.remove(element);
}
//...
现在,对于视图,我有一个名为staffView的课程,此类是创建视图的地方,它有两个官方实例,一个用于GroupStaff操作,另一个用于员工。
。public class StaffView {
private StaffGate staffGate = new StaffGate();// Grp operations
private StaffGate staffGatestf = new StaffGate();// Staff operations
现在,我可以创建一个小组和员工,他们坚持不懈,我也可以删除员工实体。问题是当我想删除STAUPT组实体时,它会引发FK违规例外
[EL Warning]: 2016-06-25 10:35:20.567--UnitOfWork(1053875258)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.2.v20151217-774c696): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`school-finma`.`staff`, CONSTRAINT `FK_STAFF_STAFF_GROUP_ID` FOREIGN KEY (`STAFF_GROUP_ID`) REFERENCES `staff_group` (`ID`))
Error Code: 1451
Call: DELETE FROM STAFF_GROUP WHERE (ID = ?)
bind => [1 parameter bound]
Query: DeleteObjectQuery(StaffGroup [id=4, name=Drivers, imageByteInfoEntity=null, staffs={[]}, school=School [id=1, name=Banafsaj, schoolType=USA, address=null, creationDate=2016-06-13, image=ImageByteInfoEntity [id=1, byteImage.length=2793472, width=1024, height=682], active=true], active=true])
Exception in thread "JavaFX Application Thread" javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.2.v20151217-774c696): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`school-finma`.`staff`, CONSTRAINT `FK_STAFF_STAFF_GROUP_ID` FOREIGN KEY (`STAFF_GROUP_ID`) REFERENCES `staff_group` (`ID`))
Error Code: 1451
Call: DELETE FROM STAFF_GROUP WHERE (ID = ?)
bind => [1 parameter bound]
Query: DeleteObjectQuery(StaffGroup [id=4, name=Drivers, imageByteInfoEntity=null, staffs={[]}, school=School [id=1, name=Banafsaj, schoolType=USA, address=null, creationDate=2016-06-13, image=ImageByteInfoEntity [id=1, byteImage.length=2793472, width=1024, height=682], active=true], active=true])
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:879)
at derbyware.school.dao.AbstractFacade.remove(AbstractFacade.java:49)
at derbyware.school.logic.StaffGate.removeFromDBAndMemory(StaffGate.java:49)
我确实有级联。
,当我使用时,问题确实不出现 为什么会发生这种情况?我该如何修复? 我添加了此行,然后在suffgate的删除方法中添加了这一行,但仍然存在同样的问题: update 我的意思 ,当我仅使用一个Staffgate实例 是在课堂上:Staffiew I删除:StaffGatestf实例,仅与Staffgate合作。在这种情况下,没有例外。staffGatestf = new StaffGate();
我仅通过删除一个Staffgate实例来修复它。但是,如果有人知道如何修复,我会很感激