多个多对一实体列

多个多对一实体列

我在建筑物和楼层之间有一种关系:有些楼层只能位于1栋建筑物中(这些楼层只有1个“建筑物”表的外键),有些楼层位于2栋建筑物之间(这些楼层将有2个外键用于“构建”表,一个是startBuildingId,第二个是endBuildingId)。我有这段代码来表示这种关系:

public class Building implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "building")
    private Set<Floor> floors = new HashSet<>();
}

public class Floor implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JsonIgnoreProperties("floors")
    @JoinColumn(name = "building_id")
    private Building building;

    @ManyToOne
    @JsonIgnoreProperties("")
    @JoinColumn(name = "start_building_id")
    private Building startBuildingId;

    @ManyToOne
    @JsonIgnoreProperties("")
    @JoinColumn(name = "end_building_id")
    private Building endBuildingId;
}


创建位于两座建筑物之间的楼层时,我选择了startBuildingIdendBuildingId,但是当我从建筑物的private Set<Floor> floors中检索所有楼层时,它仅显示其他楼层,而不显示那些坐在两座建筑物之间。我该如何实现?

最佳答案

我的建议:


三个@OneToMany字段
返回它们的并集的方法


我假设您不对楼层列表进行任何修改(添加楼层将无法明确定义-它属于一栋建筑物,还是共享的)。在这种情况下,它可能是实际集合上的一个懒惰的,不可修改的视图。

另外(最好是),您可以轻松创建一个JPQL /标准查询,该查询通过建筑物ID查找所有楼层。

关于java - hibernate -多个多对一实体列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56420184/

10-09 06:54