我正在尝试实现删除功能,但我得到的只是这个 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 关系的实体 (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
。使用它意味着删除也将级联到汽车,尽管还有其他用户与这些汽车相关联。
关于java - 使用 Hibernate 时出现 ORA-02292,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31022675/