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.
Làm thế nào để sửa lỗi N+1 query trong Hibernate?
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