如何解决如何映射 JPA 一对多关系以进行级联删除
我真的很困惑如何将 JPA 一对多关系映射,以便我可以级联删除。
我有院子
@Data
@Entity
@Table(name = "yard",schema = "example")
public class Yard {
@Id
@OneToMany(cascade= CascadeType.REMOVE,orphanRemoval = true)
@Column(name="yard_num")
long yardNum;
@Column(name="sqft")
Integer sqft;
}
和花
@Data
@Entity
@Table(name = "flower",schema = "example")
public class Flower {
@Id
@Column(flower_id)
long flowerId
@ManyToOne(cascade= CascadeType.ALL)
@JoinColumn(name="yard_num")
long yardNum;
@Column(name="num_petals")
Integer numPetals;
}
一个院子可以有很多花,也可以没有花,但每朵花只需要一码。如果一个院子被删除,花也应该被级联删除。 Flower 上有一个 yard_num 的外键。
我认为这是从 Yard 到 Flower 的单向 OneToMany。但是我在 Yard 的 yardNum 上放置 OneToMany 标签并在 Flower 的 yardNum 上放置 @ManyToOne 标签时出错。为什么这些需要是集合?我的其他标签是否正确(JoinColumn)?
解决方法
如果 Yard 可以有很多 Flowers,正如您提到的,那么概念是实体 Yard 必须包含一组实体 花(不是多头等),顺便说一句,也许是空的。并且实体Flower必须有一个实体Yard(不是Yard的id)
我将提供一个实体映射,未经测试,但想法是我上面提到的:
院子:
@Data
@Entity
@Table(name = "yard",schema = "example")
public class Yard {
@Id
@Column(name="yard_num")
Long yardNum;
@OneToMany(mappedBy = "yard",cascade = CascadeType.REMOVE,orphanRemoval = true)
List<Flower> flowers = new ArrayList<>();
@Column(name = "sqft")
Integer sqft;
}
花:
@Data
@Entity
@Table(name = "flower",schema = "example")
public class Flower {
@Id
@Column(name="flower_id")
Long flowerId
@ManyToOne
// you have to define FK to table "yard" here,if its name is "yard_num" so it's OK
@JoinColumn(name="yard_num")
Yard yard;
@Column(name="num_petals")
Integer numPetals;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。