Обновления HQL и доменные объекты - PullRequest
1 голос
/ 19 марта 2010

У меня есть довольно простой вопрос Hibernate. Вызывают ли обновления HQL (и / или критерии) запросы на обновление объектов живого домена? И автоматически ли они сбрасывают недействительные доменные объекты из кэша первого уровня?

Пример:

Player playerReference1 = session.get(Player.class,1);
session.createQuery("update players set gold = 100").executeUpdate();
//Question #1 -- does playerReference1.getGold() now return 100?
Player playerReference2 = session.get(Player.class,1);
//Question #2 -- does playerReference2.getGold() return 100, or is it the same exact object?

Должен ли я практиковать выселение всех объектов, на которые влияет обновление HQL, если есть вероятность, что какой-то код понадобится позже?

1 Ответ

2 голосов
/ 19 марта 2010

Ответ на оба вопроса - нет. Согласно Сохранение Java с Hibernate , глава 12:

Если вы выполняете оператор SQL, который работает непосредственно со строками в базе данных, любое внесенное вами изменение не влияет на объекты в памяти (в каком бы состоянии они ни находились). Другими словами, любой прямой оператор DML обходит контекст персистентности Hibernate (и все кэши).

Это относится и к HQL. Они рекомендуют выполнять DML перед загрузкой любых объектов из сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...