Từ mô tả vấn đề của bạn, có vẻ như bạn đang gặp phải vấn đề đánh giá thông số. Về cơ bản, SQL Server đang tạo một kế hoạch truy vấn dựa trên một tập hợp các giá trị tham số cũ hơn đã được chuyển vào và không tạo ra một kế hoạch thực thi hiệu quả cho truy vấn hiện đang chạy.
Thông thường, tôi giải quyết vấn đề này bằng cách chuyển các giá trị tham số vào các biến cục bộ và sử dụng các giá trị đó trong truy vấn của tôi hoặc bằng cách sử dụng TÙY CHỌN (RECOMPILE). Tuy nhiên, vì bạn đang sử dụng Hibernate nên giải pháp thông thường của tôi không phải là một lựa chọn dành cho bạn. Theo tôi hiểu, tùy chọn tốt nhất sẽ là sử dụng Hibernate để chạy một truy vấn SQL gốc bằng cách sử dụng readyStatement () hoặc createSQLQuery (), rất tiếc, sẽ loại bỏ một số lợi ích của việc sử dụng Hibernate.