Весной я дал совет по передаче транзакции вокруг моих методов обслуживания. Так, скажем, в моем пакетном классе я вызываю сервисный метод, чтобы загрузить список объектов и вернуть его в мой пакетный класс. Затем в моем пакетном классе я вызываю сервисный метод для обработки каждого из этих объектов. Но я получу исключение при отложенной загрузке, если этот метод службы попытается получить доступ к отложенному загруженному свойству объекта, так как этот список объектов был загружен с другим сеансом гибернации.
Таким образом, обходной путь, который может быть не самым оптимальным, - пакетный класс просто вызывает службу для загрузки всех идентификаторов этих объектов (длинные значения) - и мы передаем этот идентификатор методу службы, который будет загружать этот объект из БД по идентификатору, а затем выполнить обработку на нем.
Мысли об этом?
Другой вопрос, который у меня возник, состоял в том, должен ли каждый из этих объектов быть независимыми друг от друга, должен ли я сохранять или не сохранять каждый объект по одному, а не сохранять их все сразу или пакетировать их. Если записано 5000 записей, кажется, что приложение сильно замедляет работу при вызове сохранения / обновления / вставки, поскольку все еще выполняет все это в памяти в сеансе Hibernate. Но если я вместо этого сохраняю / обновляю / вставляю каждую запись (обрабатывая один идентификатор за раз), а затем фиксирую, когда это делается с этим объектом перед переходом к следующему, это, похоже, значительно ускоряет. Также, если я сделаю это, скажем, каждые 200 или даже сделаю все 5000 сразу, если одна запись не будет вставлена / обновлена и получит ошибку, ничего не будет сохранено, и все откатится.
Каковы лучшие практики для обработки таких вещей? Похоже, что-то действительно общее. Спасибо