簡體   English   中英

休眠-將多個多對一實體列

[英]hibernate - mutiple many-to-one to the same entity column

我在建築物和樓層之間有一個關系:有些樓層只能位於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檢索所有private Set<Floor> floors ,它僅顯示其他地板,而不顯示那些位於的地板在2樓之間。 我該如何實現?

我的建議:

  • 三個@OneToMany字段
  • 返回它們的並集的方法

我假設您不對樓層列表進行任何修改(添加樓層將無法明確定義-它是屬於單個建築物還是共享建築物)。 在這種情況下,它可能是實際集合上的一個懶惰的,不可修改的視圖。

另外(最好是),您可以輕松創建一個JPQL /條件查詢,該查詢通過建築物ID查找所有樓層。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM