Если вы можете выполнить все свои запросы для отправки своих задач с использованием одного сеанса, вы, вероятно, можете что-то исправить. Предостережение заключается в том, что вы должны понимать, как работают механизмы кэширования hibernate (да, это множественное число). Кеш первого уровня, связанный с сессией, будет здесь ключевым. Кроме того, важно знать, что выполнение запроса и гидратирование объектов не будут проверять и возвращать объекты из кэша первого уровня ... правая рука не разговаривает с левой рукой.
Итак, чтобы выполнить то, что вы пытаетесь сделать (при условии, что вы можете продолжать использовать одну и ту же сессию ... если вы не можете сделать это, тогда я думаю, что вам не повезло), вы можете сделать следующее:
- выполнить ваш запрос
- для каждого возвращаемого объекта, перезагрузите его с помощью метода get Session
- проверьте флаг isProcessed и отправьте при необходимости
При вызове get вы обязательно получите объект из кэша первого уровня ... где хранятся все грязные объекты, ожидающие сброса.
Для справки, это - чрезвычайно хорошо написанный и полезный документ о кэшировании в спящем режиме.