Как я могу обновить сущность вместо того, чтобы вставлять ее в базу данных с помощью Hibernate? - PullRequest
0 голосов
/ 23 апреля 2020

Например, у меня есть объект Job и работник. когда я добавляю новое задание, я хочу назначить ему рабочих, но вместо того, чтобы снова добавлять его пользователей в базу данных (и создавать дубликаты), я хочу просто обновить работников (добавлять задания к ним, когда я создаю новое задание со списком работников)

пример:

@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 Ответ

0 голосов
/ 23 апреля 2020

Объекты должны использовать двунаправленную ассоциацию 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;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...