Lỗi này ném ra khi bạn chạm vào một association LAZY sau khi persistence context đã đóng — proxy không còn EntityManager nào để nạp dữ liệu.
Order order = orderRepository.findById(id).orElseThrow(); // transaction kết thúc ở đây
order.getItems().size(); // LazyInitializationExceptionVì sao dev không thấy: Spring Boot mặc định bật spring.jpa.open-in-view=true (Open Session In View). Interceptor giữ EntityManager mở đến hết vòng đời request, nên lazy load ở tầng controller/view vẫn chạy — chỉ là nó bắn thêm truy vấn ngoài transaction, âm thầm. Khi tắt cờ này (hoặc gọi từ luồng không có request, như @Async, @Scheduled, message consumer), exception xuất hiện.
Cách xử lý đúng:
- Nạp sẵn dữ liệu cần dùng trong transaction: join fetch hoặc @EntityGraph.
- Trả DTO projection thay vì entity ra ngoài tầng service.
Cách sai thường gặp: đổi hết sang FetchType.EAGER — mọi truy vấn đều kéo theo dữ liệu thừa. Hibernate.initialize() chỉ là vá tạm.