如何编写用于创建JOIN多个表的JPA代码?

时间:2019-03-08 02:26:25

标签: java mysql spring-boot jpa spring-data-jpa

首先,对于这个问题,我感到抱歉,因为我不知道该使用什么关键字来搜索答案。谢谢您的理解!

  1. 我有第一个表slave_table,像这样的实体:
@Entity
@Data
@Table(name = "slave_table", uniqueConstraints = {@UniqueConstraint(columnNames = "name")})
public class SlaveEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @NotNull(groups = Update.class)
    private Long id;

    @NotBlank
    @NotNull
    @Column(name = "name")
    private String name;

    @Column(name = "tag")
    private String tag = "default";

    @Column(name = "idle")
    private Boolean idle;
}
  1. 还有第二张表task_table,像这样的实体:
@Entity
@Data
@Table(name = "task_table")
public class TaskEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @NotNull(groups = Update.class)
    private Long id;

    @NotBlank
    @NotNull
    @Column(name = "name")
    private String name;

    @NotNull
    @Column(name = "qps")
    private Long qps;

    @Column(name = "status")
    private Integer status;

    @ManyToOne
    private JobEntity job;

    @OneToOne
    private SlaveEntity slave;
  1. 我有第三个表job_table,像这样的实体:
@Entity
@Data
@Table(name = "job_table")
public class JobEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @NotNull(groups = Update.class)
    private Long id;

    @NotBlank
    @NotNull
    @Column(name = "name")
    private String name;

    @Column(name = "status")
    private Integer status = 0;

    @OneToMany
    private Set<SlaveEntity> slaves;

    @JsonIgnore
    @OneToMany
    private Set<TaskEntity> tasks;
}

他们将创建jobjob_slave_tablesjob_task_tablestask_table MySQL表。

一项工作至少包含一个任务,而一项任务仅使用一个从属。

问题:

  1. 我不想task_table表,但是我需要使用实体。怎么样?

  2. 当我创建一个作业时,我不想创建job_slave_tablesjob_task_tables表,但是我想创建一个表job_task_tables,它包含以下所有列TaskEntity根据slave的名称命名,因为一个作业至少包含一个任务,所以一个任务只能运行一个从属。怎么样?

非常感谢!

0 个答案:

没有答案