2009-11-04 46 views

Trả lời

4

Giới hạn cơ sở dữ liệu này vẫn tồn tại với hibernate. Nếu bạn thực sự cần phải có nhiều hơn 1000 mục trong mệnh đề trong của bạn, bạn sẽ phải chia danh sách mình trong mã và chạy truy vấn cho mỗi khối 1000 phím, sau đó nối các tập kết quả lại với nhau.

Lưu ý lỗi này bị hỏng nếu truy vấn của bạn cần sắp xếp hoặc tổng hợp kết quả truy vấn vì toàn bộ kết quả sẽ chỉ được biết trong mã. Trong trường hợp này, bạn nên tìm một cách khác để viết truy vấn không yêu cầu mệnh đề IN.

+1

Một cách khác là dán 1000 giá trị vào bảng tạm thời toàn cầu trong cơ sở dữ liệu và tham gia hai bảng. Cơ sở dữ liệu rất tốt khi tham gia bảng :) –

+0

Chính xác để cơ sở dữ liệu thực hiện công việc! Việc chia tách là một công việc được biết xung quanh, nhưng một công cụ nên chỉ ra rằng bạn cần phải suy nghĩ lại cách tiếp cận của bạn. –

+0

Một cách khác là thực hiện HOẶC trên 1000 nhóm IN phần tử. Bằng cách này bạn có thể "ORDER BY" trên quiry. – hidralisk

2

Có như Hibernate sẽ gọi Oracle tại một số sân khấu để giới hạn là mức thấp nhất của các giới hạn trong Hibernate và Oracle

Hibernate không có gì đặc biệt với dữ liệu cho một trong - chỉ cần vượt qua nó để cơ sở dữ liệu

3

Chúng tôi đã có cùng một vấn đề và giải quyết nó bằng cách tách nó ra thành các gói 100er khoản TRÊN

select * from mytable where id in (...) or id in (...). 

Ghi chú:

  • đảm bảo rằng bạn sử dụng các biến liên kết
  • đảm bảo rằng truy vấn luôn giống nhau. Này được thực hiện bằng cách điền lên các điều khoản TRÊN với -1 đến khi bạn có 100 yếu tố trong nó
  • cố gắng sử dụng luôn cùng một số ORed trong (...) để truy vấn luôn trông đến cùng

Tại sao bạn muốn các điểm trên? Nó là để trình tối ưu hóa truy vấn có thể sử dụng lại kế hoạch truy vấn.

tối ưu hóa khác:

  • thay vì sử dụng -1, bạn chỉ có thể sử dụng giá trị đích thực cuối cùng một lần nữa. Điều đó thậm chí còn tốt hơn một chút.

Ví dụ: trong (1, 2, 3, 4, 4, ..., 4)

Cũng lưu ý: chúng tôi thử nghiệm với số lượng cố định khác nhau của các yếu tố trong định tại khoản và quan sát giảm biểu diễn cho nhiều hơn 100 yếu tố.

+0

PS: nếu câu lệnh sql trả về giá trị trong mệnh đề IN được biết, bạn cũng có thể cân nhắc thay thế IN của mình bằng câu lệnh EXISTS. –