我对带有@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选项,可用性将与您想要的相同。

10-08 07:14