У меня есть эта сущность
@Builder
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@Data
@Entity
@Table(name = "visits")
public class Visit {
@EqualsAndHashCode.Include
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@NotNull
@Column(nullable = false, updatable = false)
private long id;
@Column
private LocalDate date;
@Column
private LocalTime startTime;
@Column
private LocalTime endTime;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "client_id")
private Client client;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "employee_id")
private Employee employee;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "services_booked",
joinColumns = {@JoinColumn(name = "visit_id")},
inverseJoinColumns = {@JoinColumn(name = "service_id")}
)
private Set<Service> servicesBooked = new HashSet<>();
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "visit")
private Set<TimeSlot> timeSlots = new HashSet<>();
}
Мой контроллер выполняет действие удаления для служебного компонента в транзакции:
@Transactional
@DeleteMapping("/{id}")
public ResponseEntity<DeleteVisitResponse> deleteVisit(@PathVariable("id") long visitId,
@RequestAttribute(USER_AUTH) UserAuthDto userAuthDto) {
// some logic
Optional<Visit> visit = visitService.findVisitById(visitId);
// check isPresent via Optional.map
visitService.deleteVisit(visit.get());
// constructing the response
}
А служебный компонент просто удаляет его:
@Override
public void deleteVisit(@NonNull Visit visit) {
visitRepository.delete(visit);
}
Но на самом деле это не удаляет его. Он выполняет последовательный выбор для разрешения связанных объектов. Вот записи журнала этого удаления: https://gist.github.com/bvn13/906582ad39720e033c24ddd6f59f906c
Вот и все. Почему он не может выполнить операцию удаления?