有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何更新实体,而不是使用Hibernate将其插入数据库?

例如,我有一个Job实体和一个worker实体。 当我添加新作业时,我希望为其分配工人,而不是将其用户添加到 再次创建数据库(并创建副本)我只想更新workers (当我使用worker list创建新工单时,将工单添加到工单中)

例如:

@Entity
@Table(name = "job")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Job{

  @Id
  @Column(name = "id")
  private Long id;


  @OneToMany(mappedBy = "job", fetch = FetchType.EAGER)
  private Set<Worker> workers;
}

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "workers")
public class User extends DataAudit {

  @Id
  private Long id;


  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "job_id", referencedColumnName = "id")
  private Job job;

}

Worker worker1 = workerService.getWorkerById(1);
Job job = new Job(1,worker1)
jobRepo.save(job)

共 (1) 个答案

  1. # 1 楼答案

    实体应使用双向OneToMany关联@JoinTable:

    @Entity
    @Table(name = "job")
    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    public class Job{
    
      @Id
      @Column(name = "id")
      private Long id;
    
    
      @OneToMany(fetch=FetchType.LAZY)
      @JoinTable(name="job_workers", 
        joinColumns={@JoinColumn(name="job_id")},
        inverseJoinColumns={@JoinColumn(name="worker_id")}
      )
      @Cascade(org.hibernate.annotations.CascadeType.ALL)
      private Set<Worker> workers;
    }
    
    ////////////////////////////////////////////////////////
    
    @Entity
    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    @Table(name = "workers")
    public class User extends DataAudit {
    
      @Id
      private Long id;
    
    
      @ManyToOne
      @JoinTable(name="job_workers", 
        joinColumns={@JoinColumn(name="worker_id", insertable=false,updatable=false)},
        inverseJoinColumns={@JoinColumn(name="job_id", insertable=false,updatable=false)})
      private Job job;
    
    }