我正在尝试实现删除功能,但是我得到的只是这个ORA-02292错误:
Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-02292: Integritäts-Constraint (VDMA.FK892DE8B473F40868) verletzt - untergeordneter Datensatz gefunden
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951)
我有一个与其子实体具有n:m关系的Entity(MainEntity)。
例如:一个用户可以有多辆车,每辆车可以由不同的用户驾驶。
删除用户后,我也希望删除用户与汽车之间的关联。这就是为什么我认为我可以执行以下操作的原因:
用户实体
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "user_car", joinColumns = {@JoinColumn(name = DATABASE_COLUMN_ID, nullable = false, updatable = false) }, inverseJoinColumns = {@JoinColumn(name = DATABASE_COLUMN_TYPE_ID,
nullable = true, updatable = false) })
private Set<UserCar> userCars;
汽车实体
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "userCars")
private Set<User> users;
结果是:
创建表,保留数据-一切正常。除删除条目外:一旦我尝试删除一个用户并且该用户有汽车(因此有一个用户:汽车关系),我确实会收到上面显示的错误。
如果用户没有汽车,我可以毫无问题地将其删除。因此,问题必须出在USER_CAR表中。
也要清除userCars
:
user.getUserCars().clear()
这将破坏用户与关联汽车之间的关联(这将从联结表中删除相应的记录)。
另外,您也不需要CascadeType.ALL
多对多关联,因为它隐含了CascadeType.REMOVE
。使用它意味着清除也将级联到汽车上,尽管还有其他与这些汽车相关联的用户。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句