Tôi có một số lượng lớn các hàng trong cơ sở dữ liệu mà từ đó tôi cần tạo một tài liệu XML. Tôi đang sử dụng hibernate 3. Phương thức list() cơ bản trong các giao diện tiêu chí và truy vấn có vẻ nguy hiểm: tôi bỏ nó khá nhiều để đọc tất cả các bản ghi vào bộ nhớ ngay cả khi tôi chỉ lặp lại chúng. Hoặc là có một số phép thuật lười biếng tải? Nếu không, tôi dường như có hai lựa chọn trái: sử dụng scroll() hoặc iterate() từ Query (cuộn cũng có mặt trong Criteria). iterate không nhìn tất cả những gì tuyệt vời, hoặc nếu tôi muốn có tối thiểu SQL roundtrips: "Truy vấn SQL đầu tiên trả về chỉ định danh". Vì vậy, tôi phải, tôi có phải sử dụng scroll() cho điều này?Hibernate: Tránh đọc tất cả các bản ghi vào bộ nhớ cùng một lúc
Trả lời
Sử dụng phương thức setMaxResults() trên Tiêu chí.
Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(maxResults);
crit.setFirstResult(firstResultIndex);
List cats = crit.list();
http://hibernate.org/hib_docs/v3/reference/en/html/querycriteria.html
http://www.hibernate.org/hib_docs/v3/api/org/hibernate/Criteria.html
Điều tôi muốn làm là có tất cả kết quả trong giao dịch thời trang. Tôi thu thập rằng bạn có nghĩa là tôi nên xây dựng các resultset lớn từ các bộ phận. Tôi có thể sử dụng chúng để "khâu" kết quả lớn, nhất quán của tôi với nhau để tôi thực sự có được ảnh chụp nhanh từ một thời điểm nhất định hay không. – auramo
Tôi không chắc chắn ý của bạn là gì "có tất cả kết quả trong một giao dịch thời trang". –
Điều tôi muốn nói là kết quả của tôi là ảnh chụp nhanh, không có ghi/xóa nào xảy ra ở giữa các ứng dụng khách khác sẽ ảnh hưởng đến điều đó. – auramo
Ngoài ra, có một cái nhìn tại đợt lấy Mục 19.1.4 và 19.1.5 nên làm. http://www.hibernate.org/hib_docs/v3/reference/en-US/html_single/#queryhql-joins-forms
Bạn có biết liệu các truy vấn theo lô đó (ví dụ 10, 10 và 5 con mèo trong ví dụ) có kết thúc tất cả trong danh sách (nếu tôi truy vấn bảng có danh sách() trong bộ nhớ trong khi tôi lặp qua nó không? lô đầu tiên khi tôi tiến hành đợt tiếp theo (ví dụ 10 con mèo tiếp theo sau 10 con mèo đầu tiên). – auramo
Đây là những gì tôi đang có kế hoạch thực hiện: Tạo một bảng tạm thời với các ID đối tượng của tất cả các hàng tôi cần phải xuất khẩu:
Insert into BatchTable (ID, Seq) Select (O.ID, Sequence.Next)
From MyObject O Where ...
Trong đơn vị nhỏ của khối lượng công việc trong các đối tượng :
Select Min(B.Seq), Max(B.Seq) From BatchTable;
for (batch = minBatch; batch <= maxBatch; batch += size) {
beginTransaction();
results = query("Select O From MyObject O, BatchTable B
Where O.ID = B.ID and (? <= B.Seq AND B.Seq < ?)");
exportXML(results);
for (MyObject O : results) {
O.setProcessed(True);
O.update();
}
commit();
}
Nếu bạn không cần phải đánh dấu các đối tượng tắt như chế biến không, bạn chỉ có thể sử dụng nút cuộn() và đuổi các đối tượng từ phiên như bạn đang thực hiện với họ.
Hãy thử sử dụng cuộn() kết hợp với điều này:
http://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/StatelessSession.html
Một API lệnh theo định hướng để thực hiện thao tác hàng loạt chống lại một cơ sở dữ liệu.
Phiên không trạng thái không triển khai bộ nhớ cache cấp đầu tiên hoặc tương tác với bất kỳ bộ nhớ cache cấp thứ hai nào, cũng như thực hiện thao tác ghi đè giao dịch hoặc tự động bẩn, cũng như không thực hiện thao tác. Các bộ sưu tập bị bỏ qua bởi một phiên không trạng thái. Các hoạt động được thực hiện thông qua một phiên bỏ qua không trạng thái của mô hình sự kiện và kẻ đánh chặn của Hibernate. Các phiên không quốc tịch dễ bị ảnh hưởng bởi các hiệu ứng răng cưa dữ liệu, do thiếu bộ nhớ cache cấp một.
Đối với một số loại giao dịch nhất định, phiên không quốc tịch có thể hoạt động nhanh hơn một chút so với phiên trạng thái.
- 1. Tìm kiếm solitaire Sunspot, cách trả lại tất cả các bản ghi cùng một lúc?
- 2. Thực hiện tất cả các điều khiển trên một biểu mẫu chỉ đọc cùng một lúc
- 3. Làm thế nào tôi có thể xóa tất cả các bản ghi từ một TClientDataset cùng một lúc?
- 4. Có thể nhiều luồng ghi vào một tập tin cùng một lúc, nếu tất cả các luồng được ghi vào các vị trí khác nhau?
- 5. Làm thế nào để xóa tất cả các liên kết trong một Hibernate JoinTable cùng một lúc?
- 6. Kiểu cam kết Git: Tất cả các tệp đã thay đổi cùng một lúc hoặc một tệp cùng một lúc?
- 7. Đọc và Ghi vào một tập tin cùng một lúc trong java
- 8. Bộ nhớ chia sẻ php đọc tất cả 0s
- 9. Xóa bản ghi từ nhiều bảng cùng một lúc?
- 10. Đồng thời ghi vào các vị trí khác nhau trong cùng một dòng bộ nhớ cache
- 11. Ghi đè người đọc để đọc đoạn văn cùng một lúc thay vì dòng
- 12. htaccess ghi đè tất cả các trang vào cùng một trang trên một tên miền khác
- 13. khi nào đọc và ghi vào bộ nhớ hợp pháp?
- 14. Làm thế nào để bạn chèn nhiều bản ghi vào một bảng cùng một lúc?
- 15. Hai quy trình đọc/ghi vào cùng một tệp Python
- 16. Truy vấn Hibernate cho cùng một bản ghi nhiều lần
- 17. Đọc nhiều tệp với API FileReader Javascript cùng một lúc
- 18. Có thể đọc và ghi vào tập tin cùng lúc không?
- 19. Làm thế nào để bạn tải lại tất cả các cửa sổ vim cùng một lúc?
- 20. makefiles - biên dịch tất cả các tệp c cùng một lúc
- 21. Có cách nào để sửa tất cả các tin nhắn MATLAB mlint cùng một lúc không?
- 22. Phong cách tất cả các UITextField cùng một lúc chứ không phải trong mỗi ViewController?
- 23. Làm cách nào để tránh lỗi OOM (Hết bộ nhớ) khi truy xuất tất cả các bản ghi từ bảng lớn?
- 24. Cách đọc tất cả các byte cùng nhau qua Bluetooth?
- 25. Ghi vào bộ nhớ riêng trong Android
- 26. bash: đọc văn bản từ một chuỗi một ký tự cùng một lúc, với khoảng trắng
- 27. SQL - Chèn và Cập nhật Nhiều Bản ghi cùng lúc
- 28. Tập tin đọc Java vào bộ nhớ và cách không làm nổ bộ nhớ
- 29. Làm thế nào để animate một tập hợp các đối tượng jQuery cùng một lúc (thay vì tất cả cùng một lúc)
- 30. Kiểm tra tất cả các giá trị mảng cùng một lúc
Công cụ này cũng áp dụng cho NHibernate :) –