У меня есть большое количество строк в базе данных, из которых мне нужно создать XML-документ. Я использую hibernate 3. Основной метод list() в интерфейсах Criteria и Query выглядит опасным: я очень жалею, что он должен читать все записи в памяти, даже если я только перебираю их. Или есть какая-то ленивая магия загрузки? Если нет, у меня, похоже, осталось два варианта: использование прокрутки() или итерации() из Query (прокрутка также присутствует в критериях). итерация не выглядит так здорово, если я хочу иметь минимальные обратные SQL-запросы: «Первый SQL-запрос возвращает только идентификаторы». Так ли я прав, мне нужно использовать scroll() для этого?Спящий режим: избегать чтения всех записей в память сразу
ответ
Используйте метод setMaxResults() по критериям.
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
Что я хочу сделать, так это получить все результаты в транзакционном режиме. Полагаю, вы имеете в виду, что я должен собрать целый набор результатов из частей. Могу ли я использовать их для того, чтобы «сшить» мои последовательные большие результаты вместе, чтобы я действительно получил моментальный снимок с определенного момента времени. – auramo 2008-11-16 19:16:23
Я не уверен, что вы подразумеваете под «получить все результаты в транзакционном режиме». – 2008-11-16 19:23:54
Кроме того, посмотрите на партию, забирающий раздел 19.1.4 и 19.1.5 должны делать. http://www.hibernate.org/hib_docs/v3/reference/en-US/html_single/#queryhql-joins-forms
Это то, что я планирую делать: Создать временную таблицу с идентификаторами объектов всех строк мне нужно экспортировать:
Insert into BatchTable (ID, Seq) Select (O.ID, Sequence.Next)
From MyObject O Where ...
В небольших единицах рабочей нагрузки в объектах :
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();
}
Если вам не нужно, чтобы пометить объекты прочь, как procesed, вы можете просто использовать свиток() и выселить объекты из сессии, как вы сделали с ними.
Попытка с помощью прокрутки() в сочетании с этим:
http://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/StatelessSession.html
ИПП командно-ориентированных для выполнения массовых операций с базой данных.
Сеанс без учета состояния не реализует кеш первого уровня и не взаимодействует с кешем второго уровня, а также не выполняет транзакционную запись или автоматическую грязную проверку, а также не выполняет операции с каскадом для связанных экземпляров. Сеансы игнорируются сеансом без сохранения. Операции, выполняемые с помощью сеанса сеанса без учета состояния бездействия Hibernate и перехватчиков. Сеансы без учета состояния уязвимы для эффектов сглаживания данных из-за отсутствия кеша первого уровня.
Для определенных видов транзакций сеанс без сохранения состояния может выполнять несколько быстрее, чем сеанс с состоянием.
- 1. Перенос записей в спящий режим
- 2. Спящий режим для получения записей?
- 3. Спящий режим сохранения записей в случайном порядке
- 4. Спящий режим сбрасывания всех таблиц
- 5. Спящий режим, соединяющий два стола и выборку всех записей?
- 6. Спящий режим вставки записей в несколько таблиц
- 7. Кэш-память JPA2 или спящий режим
- 8. оптимизируют SQLite чтения всех записей
- 9. Спящий режим
- 10. Как заставить спящий режим освободить память после закрытия сеанса?
- 11. Спящий режим: Пройдите миллионы строк и не просачивайте память
- 12. Обработка грязного чтения весной, спящий режим с JPA
- 13. Спящий режим в java
- 14. Спящий режим в android
- 15. CKEditor в спящий режим
- 16. спящий режим в Windows
- 17. В консольном приложении .NET предотвратите спящий режим/спящий режим Windows
- 18. C# положить компьютер в спящий режим или спящий режим
- 19. Запрос на спящий режим
- 20. Спящий режим: удалить все сущности с ассоциациями сразу
- 21. Лучший способ вставить хорошее количество записей в спящий режим
- 22. Спящий режим в JavaFX - отображение записей из выбранного ID
- 23. Спящий режим: генератор таблицы обновлений
- 24. спящий режим сохранения состояния программы
- 25. Не указывать диалект Спящий режим
- 26. автоподдержка спящий режим с пружиной 3 и спящий режим 4
- 27. Спящий режим Критерии: спящий режим левого соединения без ассоциации
- 28. Спящий режим требует начала и фиксации для чтения
- 29. Спящий режим на Android
- 30. Устранение и спящий режим
Этот материал применим и к NHibernate :) – 2008-11-16 18:02:09