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

标签 java spring hibernate jpa

例如,我有一个 Job 实体和一个 Worker 实体。 当我添加新工作时,我想为其分配工作人员,但不是将其用户添加到 再次数据库(并创建重复项)我只想更新工作人员 (当我使用 worker 列表创建新工作时向其中添加工作)

示例:

@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)

最佳答案

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

@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;

}

关于java - 如何使用 Hibernate 更新实体而不是将其插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61381524/

相关文章:

java - hibernate 标准生成器 : How to filter by a nullable entity attribute?

java - 使用 createAndShowGUI() 方法时如何将图标设置为 JFrame?

java - 在不使用具有长参数列表的构造函数的情况下构建大的、不可变的对象

java - 如何让连接线程保持 Activity 状态? (我需要使用守护进程吗?)

java - Tomcat Web 应用程序适用于 Windows 而不是 Linux

java - 在 Spring MVC 中通过配置验证格式参数

java - 无法解析属性 : userId. 用户名

java - MainActivity 不是静态类,但它在没有任何显式实例化的情况下执行。如何?

javascript - 使用jquery和html5显示存储在arraylist中的数据

hibernate - 具有多个数据库供应商支持的 Java/Maven/JPA/Hibernate 构建的最佳方法?