java - @OnDelete 仅与 @OneToMany 一起使用

标签 java hibernate jpa

我对带有 @OneToMany 关系的注释 @OnDelete 存在问题。

public class Patent {

    @OneToMany
    @JoinCollumn(name = "parent_id")
    @OnDelete(action = OnDeleteAction.CASCADE)
    private List<Child> children;

}

public class Child {
}

当我运行它时,我收到此错误:“只有反向一对多关联可以使用 on-delete="cascade"”。我需要如何更改代码才能使其正常运行,而无需双向关系?我知道,可以通过向 Child 类添加 @ManyToOne 关系和适当的注释来解决这个问题,但我不想使用这个解决方案。

编辑:这样做的目的是我需要在导出的 ddl 架构中生成“删除级联”到外键约束。

最佳答案

您所需要的只是为 OneToMany 关系使用 orphanRemoval 参数。请参阅https://docs.oracle.com/cd/E19798-01/821-1841/giqxy/供引用。

示例:

@OneToMany(mappedBy="customer", orphanRemoval="true")
public List<Order> getOrders() { ... }

但是我认为您的映射是完全错误的,对于这种关系,您应该将 Patent 字段添加到您的 Child 类中,将关系标记为 ManyToOne,然后使用 JoinColumn 并将引用设置为parent_id。使用Patent内的mappedBy和orphanRemoval选项 - 可用性将如您所愿。

关于java - @OnDelete 仅与 @OneToMany 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44006455/

相关文章:

java - Camel : File consumer component "bites off more than it can chew", 管道因内存不足错误而终止

java - 在Docker中运行jar应用程序时出现重复图层

java - 我应该如何处理 criteria.list() 的未经检查的强制转换?

java - EclipseLink 如何检测首次访问以进行延迟抓取?

java - 保存实体后,Hibernate 为使用@Formula 注释的实体属性返回 null

java - Hibernate 无法正确从数据库读取对象

java - 使用 Jackson Streaming API 从数组中提取对象

java - 将 MySQL 中的 CHAR(0) 映射到 Hibernate 中的 boolean 值

java - 在hibernate spring中是否可以从DataAccessException接收URL?

java - 在不使用 hibernate.hbm2ddl.auto 的情况下,如何将所有初始模式导出到 Flyway?