Hibernate OneToMany ManyToOne on delete cascade



我正在尝试使用Hibernate来映射以下关系:

每个订单包含2张图片。当我删除一个订单时,我希望图像也消失。

我有两个实体,OrderItems和Image,它们看起来像这样

public class OrderItems {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ID")
private Long id;
@Transient
private String language;
@OneToMany(fetch = FetchType.EAGER ,orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "order")
private List<Image> images ;
}
public class Image implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ID")
private Long id;
@Column(name = "IMAGE_NAME")
private String name;
@Column(name = "IMAGE_BYTES", unique = false, nullable = true, length = 1000000)
private byte[] image;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "order_id" , nullable = false)
private OrderItems order;
}

插入新订单也将插入相应的图像,但当我试图删除订单时,我从表中得到一个外键约束错误Image

我错过了Hibernate的一些东西吗?属性cascade = cascadtype。

感谢您抽出时间提供任何反馈。欢呼声

我已经尝试了OneToMany和ManyToOne单向和双向,但当我保存新订单时,我得到相同的外键违反错误或我的图像根本不保存。

我通过使用Spring删除订单并自动删除该订单对应的图像来解决这个问题。

所以我的第一种方法是通过直接在DB上执行sql查询来删除订单,这是问题所在。

试一下

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "order_id", nullable = false)

最新更新