@OnDelete(CASCADE)没有进行双向映射(休眠)

dee*_*kay 1 java hibernate spring-boot

我正在使用Spring Boot和hibernate 5.0.11.Final

我有以下奇怪的问题.如果我像这样定义双向映射

@Data
@Entity
public class Device {

    @OneToMany(mappedBy = "device")
    private Collection<Container> containers = new ArrayList<>();

}


@Data
@Entity
public class Container {

    @ManyToOne
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Device device;

}
Run Code Online (Sandbox Code Playgroud)

无法创建容器表上的外键约束ON DELETE CASCADE,因此删除设备不会删除其容器.

如果我使映射单向,但是如此

@Data
@Entity
public class Device {
}


@Data
@Entity
public class Container {

    @ManyToOne
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Device device;

}
Run Code Online (Sandbox Code Playgroud)

使用ON DELETE CASCADEset 按预期生成约束.

如果我在设备端设置级联@Cascade(CascadeType.DELETE)并删除@OnDelete级联工作但在休眠侧没有数据库中的物理约束.

难道我做错了什么?我应该@OnDelete只在单向映射中使用吗?这是一个错误吗?

关心大卫

el *_*ego 6

我遇到过类似的问题,选拔赛和调试一段时间后,我想出了一个有点不明显的事情:当你建立一个双向的关系,在许多方面默默地改写了约束一个侧面.因此,你应该在另一边指定OnDelete,如下所示:

@Data
@Entity
public class Device {

    @OneToMany(mappedBy = "device")
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Collection<Container> containers = new ArrayList<>();

}


@Data
@Entity
public class Container {

    @ManyToOne
    private Device device;

}
Run Code Online (Sandbox Code Playgroud)