ale*_*lex 2 java spring-data-jpa
描述机器的实体
@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<>();
}
Run Code Online (Sandbox Code Playgroud)
描述零件/节点的实体
@Entity
@Table(name = "node_machine")
public class NodeMachine {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
每台机器上安装几个部分(nodeMachines列表),每个部分可以安装在不同的机器上,所以添加了ManyToMany。
例如,车轮可以安装在摩托车或汽车上。摩托车可以有两个轮子,汽车可以有四个轮子。
我将更详细地描述表中的内容。我必须马上说这个例子不是很成功,只是为了理解。在机器表中,我们有 100 M 摩托车 (1-100) 和 100 C 汽车 (1-100)。NodeMachine 表中只有一个条目 - K1 车轮,适用于所有 100 辆摩托车和所有 100 辆汽车。由此看来,没有办法确定每辆摩托车和每辆汽车应该有多少个车轮。因此,我认为应该有第三个表,其中标明每辆汽车和摩托车的车轮数量。而且我认为表中保留 200 条摩托车车轮记录和 400 条汽车车轮记录太多余了。
每个部件都以一定数量安装在特定机器上。我想通过了解节点和计算机名称来获取特定计算机中安装的节点数。为此,您必须创建另一个包含以下字段的 count_machine_node 表
- machine_id
- node_id
- count
Run Code Online (Sandbox Code Playgroud)
我了解您将必须创建一个新实体。
@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;
}
Run Code Online (Sandbox Code Playgroud)
但是您需要在这些实体中注册哪些连接呢?
如何正确链接这三个表?
我需要创建一个 CountNodeMachine 实体吗?
小智 7
如果这符合目的,请发表评论。
@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;
Run Code Online (Sandbox Code Playgroud)
@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;
Run Code Online (Sandbox Code Playgroud)
@Entity
@Table(name="machine_part")
@IdClass(MachinePartCountPK.class)
public class MachinePartCount {
@Id
private Integer machineId;
@Id
private Integer partId;
private Integer count;
Run Code Online (Sandbox Code Playgroud)
@Embeddable
public class MachinePartCountPK implements Serializable{
private static final long serialVersionUID = 1L;
private Integer machineId;
private Integer partId;
Run Code Online (Sandbox Code Playgroud)
**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]]
Run Code Online (Sandbox Code Playgroud)
表中的数据: 机器表: 机器 零件表: 零件 machine_part 表: machine_part
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |