我对带有 @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/