java - 使用 Hibernate 时出现 ORA-02292

标签 java oracle hibernate jpa

我正在尝试实现删除功能,但我得到的只是这个 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/

相关文章:

java - JPA 实现——哪一个最好用?

java - 如何使用 hibernate 查询语言在 hibernate 中使用左外连接

java - JOptionPane 图标在 Windows 10 中被裁剪

java - Oracle JDBC 驱动程序冲突

java - 水平向JPanel添加一个又一个组件

java - 如何将 "Articles"示例的应用程序图标放在 Oracle WebCenter 站点的应用程序栏中

java - Oracle:另一个用户对架构的只读访问权限?

mysql - 使用 Spring Data 在简约数据库中写入时出错

javac错误: "Cannot find symbol"

java - 我可以使用java从spark UDF返回java对象吗