Почему @Scheduled метод не держит hibernate сессию?

Всем привет Суть в следующем, у меня есть вот такой метод:

@Scheduled(cron = "0/30 0/1 * * * ?")
@Transactional
public void executeScheduledTask() {
    System.out.println("Задача началась в " + LocalDateTime.now());
    Customer customer = customerService.getCustomers();
    log.info(customer.toString());
    System.out.println("Задача завершилась в " + LocalDateTime.now());
}

Класс Customer:

@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@Builder
@Entity
@Table(name = "customer")
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
    @JoinTable(name = "purchase",
            joinColumns = @JoinColumn(name = "customer_id"),
            inverseJoinColumns = @JoinColumn(name = "purchase_id"))
    private List<Purchase> purchase;
}

При попытке выполнить метод executeScheduledTask() без аннотации @Transactional ловлю ошибку:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ru.example.scheduler.model.Customer.purchase, could not initialize proxy - no Session

Хотелось бы понять, почему возникает данная ошибка, ведь время между вызовами методами полторы минуты, этого времени 100% хватит, чтобы сходить в базу. + Почему тогда такой ошибки не возникает во время выполнения веб запроса, при работе с контроллерами ?

Вариант использовать EAGER не предлагать, мне нужно разобраться, почему именно так не работает

Спасибо


Ответы (0 шт):