如何在 Spring Data JPA 中两次在另一个实体中使用一个实体?

时间:2021-01-28 18:10:21

标签: spring spring-boot hibernate jpa spring-data-jpa

我有一个 Airport 实体,就像;

    @Table(name = "Airport")
public class Airport extends BaseEntity {

    @Id
    @Column(name = "Id", unique = true, updatable = false)
    private Long id;

    @Column(name = "Name", unique = true)
    private String name;

    @Column(name = "IcaoCode", unique = true)
    private String icaoCode; //International Civil Aviation Organisation

    private String city;
}

而且我还有 Route 实体,它有出发机场和目的地机场;

@Table(name = "Route")
public class Route extends BaseEntity {

    @Id
    @Column(name = "Id", unique = true, updatable = false)
    private Long id;

    @Column(name = "DeparturePlace")
    private Airport departurePlace;
    
    @Column(name = "DestinationPlace")
    private Airport destinationPlace;
}

我想做的是创建具有唯一一对目的地-出发地并且目的地和出发地不能彼此相等的路线。

编辑: 一条航线只能由出发地和目的地两个机场组成。此外,如果我有像 A-B-C 这样的机场,我应该被允许创建不同的独特路线,如下所示;

A->B
A->C
B->C
B->A
C->A
C->B

Airport 和 Route 之间是否存在一对一的关系?如果是这样,我应该如何注释 Route 中的 beginPlace 和 destinationPlace 字段?

1 个答案:

答案 0 :(得分:1)

是的,有一对一的关系,所以你的 Route 实体会像

mystic

喜欢评论讨论一个机场可以在多条航线上:

在 Airport 实体中,您需要添加

@OneToOne(cascade= CascadeType.ALL)
@JoinColumn(name = "DeparturePlace_ID", referencedColumnName = "id")
private Airport departurePlace;

@OneToOne(cascade= CascadeType.ALL)
@JoinColumn(name = "DestinationPlace_ID", referencedColumnName = "id")
private Airport destinationPlace;

希望有用