2014-12-16 2 views
1

Вопрос:Spring Hibernate лучший способ справиться с модифицирующими запросами в сеансе

В рамках сессии, если мы должны использовать запрос модифицирующего такие как обновление, это изменение не будет виден в рамках сеанса. Один из способов сделать его видимым - установить изменяющийся запрос на clearAutomatically = true в аннотации @Modifying. Проблема в том, что это изменение повлияет на все изменения в одном сеансе, то есть объекты, которые уже были сохранены до этого вызова, будут аннулированы, а измененные не будут сохраняться после закрытия транзакции.

Мой вопрос: какой лучший способ справиться с этой проблемой, когда clearAutomatically не является вариантом?

ответ

1

В зависимости от сеанса спящего режима FLUSHMODE ваши постоянные объекты могут синхронизироваться с хранилищем сохранения до выполнения запроса путем выполнения операции flush() на сеансе. Процесс флеша синхронизирует состояние базы данных с состоянием сеанса путем обнаружения изменений состояния и выполнения операторов SQL, но он не фиксирует транзакцию.

по умолчанию FLUSHMODE является AUTO, который описывается как:

Сессия является иногда покраснел перед выполнением запроса для того, чтобы гарантировать, что запросы не возвращают несвежее состояние. Это режим сброса по умолчанию. Если вы получаете устаревшие данные, возвращаемые в ваших запросах, очистка сеанса вручную должна решить вашу проблему.

+0

Итак, вы говорите, что если выполнить флеш перед запуском запроса с clearAutomatically = true, мы не потеряем никаких изменений? Каков наилучший флеш-режим для этого? Благодаря! – rpvilao

+0

Если вы используете Hibernate, как предполагает предмет, тогда вам не нужно использовать метаданные @Modifying, которые выглядят как JPA, а не Hibernate. Вам просто нужно оставить AUTO flushmode, но если вы получаете устаревшие данные в запросе, выполните Session.flush() перед запуском запроса, хотя AUTO будет очищаться до большинства запросов. Вам нужно будет убедиться, что вы не изменяете отдельные или временные объекты. – itguysouth

+0

Кажется, это имеет смысл. Благодарю. Я также подтвердил, что это происходит только с обновлениями, а не с вставками, но я не могу подтвердить, связано ли это. Я собираюсь принять это сейчас. – rpvilao