[英]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;
}
當我創建一個位於兩座建築物之間的地板時,我選擇了startBuildingId
和endBuildingId
,但是當我從建築物的private Set<Floor> floors
檢索所有private Set<Floor> floors
,它僅顯示其他地板,而不顯示那些位於的地板在2樓之間。 我該如何實現?
我的建議:
我假設您不對樓層列表進行任何修改(添加樓層將無法明確定義-它是屬於單個建築物還是共享建築物)。 在這種情況下,它可能是實際集合上的一個懶惰的,不可修改的視圖。
另外(最好是),您可以輕松創建一個JPQL /條件查詢,該查詢通過建築物ID查找所有樓層。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.