I have this entity
@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<>();
}
My controller performs delete action on service bean into transaction:
@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
}
And service bean just deletes it:
@Override
public void deleteVisit(@NonNull Visit visit) {
visitRepository.delete(visit);
}
But actually it does not delete it. It performs sequential selects to resolve chained entities. Here are log records of that deletion: https://gist.github.com/bvn13/906582ad39720e033c24ddd6f59f906c
That's all. Why it cannot perform deleting operation?