Трудно понять хранение данных отношений с использованием JPA (весенняя загрузка) - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу знать, как сохранить сущность в базе данных, не сохраняя при этом и ее относительную.

например, у вас есть рабочие места для работников вашей компании, и вы хотите сохранить новые вакансии в вашей базе данных.

вы создаете 2 объекта Job и Worker с отношением OneToMany (1 задание для 3 или более работников)

при сохранении задания в базе данных оно имеет поле: works и не должно быть нулевым.

Проблема : когда вы сохраняете работу в базу данных, ее рабочие тоже сохраняются! (jobRepository.save (myJob)

, поэтому каждый раз, когда я добавляю новых рабочих мест, которые уже есть в моей базе данных, они добавляются снова (и это, конечно, нарушает работу приложения, потому что у вас не может быть дублирующих работников)

Как я могу решить эту проблему? Спасибо!

пример: 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;
}

пример: Worker

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

jobRepository.save(job)

выдает ошибку ----> JdbcSQLIntegrityConstraintViolationException: уникальный индекс или нарушение первичного ключа

1 Ответ

1 голос
/ 22 апреля 2020

Чтобы избежать дублирования идентификаторов, добавьте @GeneratedValue(strategy = GenerationType.AUTO) в поле идентификатора.

Удачи

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