【发布时间】:2015-06-24 09:22:54
【问题描述】:
我正在尝试实现删除功能,但我得到的只是这个 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)
我有一个实体 (MainEntity),它与其子实体有 n:m 关系。
例如:一个用户可以拥有多辆汽车,每辆汽车可以由不同的用户驾驶。
当用户被删除时,我希望用户和汽车之间的关联也被删除。这就是为什么我认为我可以做到以下几点:
用户实体
@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表中的约束。
【问题讨论】:
-
private Set<UserCar> userCars;中的UserCar实体是什么?它是映射到类似CAR表的汽车,而 USER_CAR 是用户和汽车之间的连接表吗?