How to create relationships in entities correctly(如何在实体中正确创建关系)
问题描述
描述计算机的实体
@Entity
@Table(name = "machine")
public class Machine {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "machine_node", joinColumns = @JoinColumn(name = "machine_id"), inverseJoinColumns = @JoinColumn(name = "node_id"))
private List<NodeMachine> nodeMachines = new ArrayList<>();
}
描述部件/节点的实体
@Entity
@Table(name = "node_machine")
public class NodeMachine {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
每台计算机上都安装了几个部件(nodeMachines列表),每个部件可以安装在不同的计算机上,于是添加了ManyToMany。
例如,轮子可以安装在摩托车或汽车上。一辆摩托车可以有两个轮子,一辆汽车可以有四个轮子。
我将更详细地描述表格中的内容。我必须直截了当地说,这个例子不是很成功,只是为了理解。在机器表中,我们有100辆M摩托车(1-100辆)和100辆C车(1-100辆)。而且NodeMachine表中只有一个条目-K1车轮,它适用于所有100辆摩托车和所有100辆汽车。由此,无法确定每辆摩托车和每辆汽车应该有多少个轮子。因此,我相信应该有第三个表,列明每辆汽车和每辆电单车的轮数。我认为在表中保留200条摩托车车轮记录和400条汽车记录太多余了。
每个部件都安装在特定数量的特定计算机上。 我想通过知道节点和机器名称来获取安装在特定机器上的节点数。 为此,您必须使用字段创建另一个COUNT_MACHINE_NODE表- machine_id
- node_id
- count
我知道您必须创建一个新实体。
@Entity
@Table(name = "node_machine")
public class CountNodeMachine {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long machine_id;
private Long node_id;
private Integer count;
}
但是您需要在这些实体中注册哪些连接?
如何正确链接这三个表?
我是否需要创建CountNodeMachine实体?
推荐答案
如果此操作有用,请评论。
计算机实体:
@Entity
@Table(name = "machine")
public class Machine {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy="machineId")
List<MachinePartCount> count;
部件实体
@Entity
@Table(name = "part")
public class Part {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy="partId")
List<MachinePartCount> count;
关系实体
@Entity
@Table(name="machine_part")
@IdClass(MachinePartCountPK.class)
public class MachinePartCount {
@Id
private Integer machineId;
@Id
private Integer partId;
private Integer count;
复合键
@Embeddable
public class MachinePartCountPK implements Serializable{
private static final long serialVersionUID = 1L;
private Integer machineId;
private Integer partId;
输出:
**machineService.findAll()**
getAllMachines: [Machine [id=1, name=m1, count=[MachinePartCount [machineId=1, partId=1, count=2]]], Machine [id=2, name=m2, count=[MachinePartCount [machineId=2, partId=102, count=4]]]]
**partService.findAll()**
getAllParts: [Part [id=1, name=p100, count=[MachinePartCount [machineId=1, partId=1, count=2]]], Part [id=102, name=p10, count=[MachinePartCount [machineId=2, partId=102, count=4]]]]
**machinePartCountService.findAll()**
getmachinePartEntries: [MachinePartCount [machineId=1, partId=1, count=2], MachinePartCount [machineId=2, partId=102, count=4]]
表中的数据:
机器工作台:
machine
零件表:
part
MACHINE_PART表:
machine_part
这篇关于如何在实体中正确创建关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在实体中正确创建关系
基础教程推荐
- 在螺旋中写一个字符串 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01