Это ожидаемое ограничение, задокументированное в справочнике Hibernate Search.
Операторы обновления HQL интерпретируются как
- Генерация пакетного SQL для выполнения операции
- Признать недействительным любой соответствующий кеш (если используется кеш второго уровня)
- Проверьте, нужно ли сбрасывать ожидающие операции в базу данных перед выполнением запроса
Но он не собирается загружать все потенциальные совпадения в памяти из базы данных! Это убило бы производительность.
Тем не менее, Lucene требует элементы в памяти, так что, действительно, это ограничение дизайна и ожидается: вы не должны запускать операторы массового обновления для индексированных типов, а скорее выполнять итерации по ним в памяти и применять изменения к объектам в цикле .
Загрузка всех объектов будет медленной, так как потребуется материализовать все данные в памяти, но это все равно необходимо для подачи Lucene; Хорошая конфигурация кэша второго уровня обычно делает свое дело, или просто запустите MassIndexer для повторной синхронизации всего, если изменения огромны.