java - hibernate - 多对一到同一实体列
问题描述
我有建筑物和楼层之间的关系:有些楼层只能在 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;
}
当我创建位于 2 个建筑物之间的楼层时,我选择了startBuildingId
and endBuildingId
,但是当我从该建筑物的 检索所有楼层时private Set<Floor> floors
,它只显示其他楼层,而不是位于 2 个建筑物之间的那些楼层。我怎样才能做到这一点?
解决方案
我的建议:
- 三个@OneToMany 字段
- 返回它们的并集的方法
我假设您没有对楼层列表进行任何修改(添加楼层不会明确定义 - 它属于单个建筑物,还是共享)。在这种情况下,它可以是对实际集合的惰性、不可修改的视图。
或者(并且最好),您可以轻松创建一个 JPQL/Criteria 查询,该查询通过建筑物 ID 查找所有楼层。
推荐阅读
- javascript - 为什么 twig json_encode 在某些情况下不起作用?
- kubernetes - 从 Kubernetes 部署中公开 SCDF 服务
- sap - SAP RFC:parameter_type RFTYPE_TABLE:uc_length 的含义?
- c - 我在 C 中打开文件时遇到问题
- python - Jack 服务器未在 ubuntu 16.04 中运行
- scala - Scala play Json - 使用类型参数读取转换器
- python - 如何更改我将拥有的内容更改为 python 地图函数?
- javascript - 如何在 Javascript 中对 Array map() 函数输出进行排序
- swift - 如何将二维数组传递给视图控制器?
- java - 二维数组中的最小上升和下降量