Нужно ли обновлять сущности после массовых обновлений / удалений с помощью HQL?

1

Я написал несколько методов DAO, которые делают массовые обновления/удаления с помощью HQL, но я вижу, что при выполнении запроса сущности в памяти не синхронизируются (кеш не обновляется).

Скажем, у меня есть коллекция проектов с набором групп каждый, и я хочу удалить все группы. Я могу перебирать группы и удалять их, но я предпочитаю запускать массовое удаление с помощью оператора HQL и IN. Тем не менее, список имеет старые объекты после выполнения запроса.

Я понял, что мне нужно обновить объекты с помощью session.refresh(). Есть ли другой способ, которым я могу автоматически обновлять и обновлять кеш?

Теги:
caching
hql
nhibernate
updates

1 ответ

1
Лучший ответ

Ответ - нет. Как описано здесь:

13.3. Операции в стиле DML

процитировать:

... Как уже обсуждалось, автоматическое и прозрачное объектно-реляционное сопоставление связано с управлением состоянием объекта. Это означает, что состояние объекта доступно в памяти, следовательно, манипулирование (с использованием операторов SQL Data Manipulation Language (DML): INSERT, UPDATE, DELETE) непосредственно в базе данных не влияет на состояние в памяти. Тем не менее, NHibernate предоставляет методы для выполнения SQL-стиля DML-исполнения, выполняемого с помощью языка запросов Hibernate (HQL)...

DML существует для нас, чтобы пропустить управление состоянием в памяти... более эффективно с точки зрения операторов SQL. Но это означает:

манипулирование... данными непосредственно в базе данных не повлияет на состояние в памяти

  • 0
    Я делаю массовые операции с HQL, а не с SQL. Однако опять в оперативной памяти состояние объектов не затрагивается.
  • 0
    HQL - это то, о чем я говорю здесь. НЕ SQL. Операции DML относятся к HQL и не могут быть связаны с сеансом памяти
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню