Обновление данных в таблице БД, если связь многие-ко-многим через связочную таблицу. Hibernate
Подскажите пожалуйста такую штуку:
Я пытаюсь сделать обновление существующей записи в таблице (связь многие-ко-многим) используя Spring Data но натыкаюсь на ошибку ConstraintKeyViolation.
Описание проблемы:
У меня есть таблица Практики она ссылается на таблицу Локации через промежуточную таблицу Практис_Локейшины. В этой таблице всего 2 поля: практис_id (указывает на йдихи в таблице Пракики) и локейшин_id (указывает на айдихи в таблице Локейшины). Когда я пытаюсь добавить новую локацию в существующую практику то получаю ошибку ConstraintKeyViolation. Помогите разобраться что делаю не так. Я просто новичек в работе со спринг дата.
Код:
Practice.java
@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.REFRESH })
@JoinTable(name = "practice_locations",
joinColumns = { @JoinColumn(name = "practice_id", referencedColumnName = "id") },
inverseJoinColumns = { @JoinColumn(name = "location_id", referencedColumnName = "id") })
private Set<Location> locations = new HashSet<>();
Location.java
@ManyToMany(mappedBy = "locations", fetch = FetchType.LAZY)
private List<Practice> practices;
Service.java
@PutMapping("/{practiceId}/add-location")
public ResponseEntity<?> addNewLocation(
@PathVariable final Long practiceId,
@RequestBody final LocationRequest locationRequest) {
final Practice foundPractice = practiceRepository.getById(practiceId)
.orElseThrow(() -> new PracticeNotFoundException("Requested practice was not found!"));
final Location newPracticeLocation = Location.builder()
.city(locationRequest.getCity())
.zipCode(locationRequest.getZipCode())
.street(locationRequest.getStreet())
.streetNumber(locationRequest.getStreetNumber())
.streetSubNumber(locationRequest.getStreetSubNumber())
.officeNumber(locationRequest.getOfficeNumber())
.phoneNumber(locationRequest.getPhoneNumber())
.status(Status.ACTIVE)
.build();
locationRepository.save(newPracticeLocation);
final Set<Location> existingPracticeLocations = foundPractice.getLocations();
existingPracticeLocations.add(newPracticeLocation);
foundPractice.toBuilder().locations(existingPracticeLocations);
practiceRepository.save(foundPractice);
return new ResponseEntity<>(
new ApiResponse(true, "New Location has been added successfully!"),
HttpStatus.OK);
}
Ошибка: org.postgresql.util.PSQLException: ERROR: insert or update on table "practice_locations" violates foreign key constraint "fk_location_practice_practice" Detail: Key (location_id)=(5) is not present in table "practices".