Почему JpaRpository.delete (entity) на самом деле не удаляет сущность? - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть эта сущность

@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

Вот и все. Почему он не может выполнить операцию удаления?

...