Я написал несколько методов DAO, которые делают массовые обновления/удаления с помощью HQL, но я вижу, что при выполнении запроса сущности в памяти не синхронизируются (кеш не обновляется).
Скажем, у меня есть коллекция проектов с набором групп каждый, и я хочу удалить все группы. Я могу перебирать группы и удалять их, но я предпочитаю запускать массовое удаление с помощью оператора HQL и IN. Тем не менее, список имеет старые объекты после выполнения запроса.
Я понял, что мне нужно обновить объекты с помощью session.refresh(). Есть ли другой способ, которым я могу автоматически обновлять и обновлять кеш?
Ответ - нет. Как описано здесь:
процитировать:
... Как уже обсуждалось, автоматическое и прозрачное объектно-реляционное сопоставление связано с управлением состоянием объекта. Это означает, что состояние объекта доступно в памяти, следовательно, манипулирование (с использованием операторов SQL Data Manipulation Language (DML): INSERT, UPDATE, DELETE) непосредственно в базе данных не влияет на состояние в памяти. Тем не менее, NHibernate предоставляет методы для выполнения SQL-стиля DML-исполнения, выполняемого с помощью языка запросов Hibernate (HQL)...
DML существует для нас, чтобы пропустить управление состоянием в памяти... более эффективно с точки зрения операторов SQL. Но это означает:
манипулирование... данными непосредственно в базе данных не повлияет на состояние в памяти