Làm thế nào để sửa lỗi N+1 query trong Hibernate?

Zalo_ScreenShot_9_2_2022_1732635

Bill và Appointment là quan hệ 1:1
Em lấy ra all Bill và câu lệnh SQL Hibernate gen ra em thấy oke rồi nhưng ko hiểu sao nó select thêm tất cả Appoinment. E có tìm trên vài trang web thì do câu lệnh SQL đc gen ra lấy cả thằng con nên nó mới sinh N+1 query, nhưng của e câu SQL đc gen chỉ lấy đúng mà nó vẫn bị lỗi N+1 query.
E tham khảo đc là join fetch thì giải quyết đc nhưng ở đây e dùng generic nên em ko bt cách giải quyết vấn đề này.

Tớ không chắc là hướng dẫn này áp dụng được cho TH của cậu, nhưng cậu thử tham khảo xem:

https://medium.com/geekculture/resolve-hibernate-n-1-problem-f0e049e689ab

Khi cậu sử dụng ORM, n+1 problem là vấn đề muôn thuở. Rất khó để giải quyết nó mà không tạo ra vấn đề mới khó giải quyết hơn.
Thường thì cá nhân tớ không sử dụng ORM, mà sử dụng một persistant framework (sử dụng plain query để gọi DB) + data mapping framework (map dữ liệu trả về sang object theo 1 hướng dẫn cho trước). Như vậy, việc gọi bao nhiêu dữ liệu sẽ được hoàn toàn kiểm soát.

Hope it helps!

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?