【发布时间】:2022-01-08 00:50:27
【问题描述】:
描述机器的实体
@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 车轮,它适用于所有一百辆摩托车和所有一百辆汽车。由此无法确定每辆摩托车和每辆汽车应该有多少个轮子。因此,我认为应该有第三张表,其中标明了每辆汽车和摩托车的轮数。而且我认为在表中保留 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 实体吗?
【问题讨论】:
标签: java spring-data-jpa