微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在JPA中的onetoone和manytoone单向关系中使用cascade.delete / orphanremoval?

如何解决如何在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 RoutFlight@OneToOne 的关系。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。