我对带有@OnDelete
关系的注释@OneToMany
有问题。
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,然后使用JoinCollumn并将引用设置为parent_id。通过Patent内部的maptedBy和orphanRemoval选项,可用性将与您想要的相同。