我在建筑物和楼层之间有一种关系:有些楼层只能在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
中检索所有楼层时,仅显示的是其他楼层,而不是位于两座建筑物之间的楼层。我该如何实现?
答案 0 :(得分:0)
我的建议:
我假设您不对楼层列表进行任何修改(添加楼层将无法明确定义-它属于单个建筑物还是共享建筑物)。在这种情况下,它可能是实际集合上的一个懒惰的,不可修改的视图。
或者(最好是),您可以轻松创建一个JPQL /条件查询,该查询通过建筑物ID查找所有楼层。