如何解决如何在JPA中的onetoone和manytoone单向关系中使用cascade.delete / orphanremoval?
假设我在下面有实体;
class Airport {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Id",unique = true,updatable = false)
private Long id;
... //unrelated fields
}
class Route {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Id",updatable = false)
private Long id;
@OnetoOne(cascade = CascadeType.ALL,orphanRemoval = true)
@JoinColumn(name = "DeparturePlaceId",referencedColumnName = "Id")
private Airport departurePlace;
@OnetoOne(cascade = CascadeType.ALL,orphanRemoval = true)
@JoinColumn(name = "DestinationPlaceId",referencedColumnName = "Id")
private Airport destinationPlace;
... //unrelated fields
}
class Flight {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Id",updatable = false)
private Long id;
@ManyToOne(fetch = FetchType.LAZY,optional = false)
@JoinColumn(name = "RouteId")
private Route route;
}
要求 1:我想在 Airport 和 Route 之间建立关系,这样 Airport 不需要知道 Route 并且 Route 需要在删除机场时也有目的地机场和目的地机场,我也想删除有出发机场或目的地机场。
要求 2:如何在 Route 和 Flight 之间建立关系,以便 Route 不需要知道 Flight 并且 Flight 也需要有 Route 每当删除一条航线时,我也想删除与该航线相关的航班. 此外,一个航班必须只有一个航线,并且一个航线可以被多个航班使用。
根据上面的要求,我的实体应该怎么改?
解决方法
对于您的第一个要求,您的实现似乎没问题。但是,我会在 OneToOne 关系中使用 @MapsId
,因为它更有效。抢夺:here
关于您的第二个要求和概念:此外,一个航班必须只有一条航线,并且一条航线可以从多个航班中使用,您需要更改 @ManyToOne Rout 和 Flight 与 @OneToOne 的关系。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。