Різниця між save і saveAndFlush у даних Spring jpa


131

Я намагаюся дізнатися весняні дані JPA, протестуючи деякі операції CRUD через JpaRepository.

Я натрапив на два методи saveі saveAndFlush. Я не розумію різниці між цими двома. При виклику saveтакож мої зміни зберігаються в базі даних, в чому ж користь saveAndFlush.

Відповіді:


139

Увімкнено saveAndFlush, зміни в цій команді будуть негайно внесені до БД. З saveцим, це не обов'язково істинно, і воно може залишатися просто в пам’яті, доки не будуть видані команди flushабо commitкоманди.

Але майте на увазі, що навіть якщо ви очищаєте зміни транзакції та не здійснюєте їх, зміни все одно не будуть видимі для зовнішніх транзакцій, поки не буде здійснено цю транзакцію.

У вашому випадку ви, ймовірно, використовуєте якийсь механізм транзакцій, який видає commitкоманду для вас, якщо все працює добре.


35
"не буде видно зовнішніх транзакцій, поки не буде здійснено транзакцію" Це залежить від рівня ізоляції інших транзакцій. Якщо рівень ізоляції транзакції становить READ_UNCOMMITTED ,, він побачить, що було розмито, але ще не здійснено іншими транзакціями.
Габ 是 好人

1
але в моєму проекті я використовую save (), saveAll () і зберігається в БД без фіксації або флеш-виклику явно. Тоді чому я віддаю перевагу saveAndFlush? В режимі FLush всі ці речі знаходяться в режимі за замовчуванням
P

37

Залежно від режиму сну в режимі сплячого режиму, який ви використовуєте ( AUTOє типовим), ви saveможете або не можете записати свої зміни в БД відразу. Під час дзвінка saveAndFlushви здійснюєте синхронізацію стану вашої моделі з БД.

Якщо ви використовуєте режим автоматичного промивання AUTO, і ви використовуєте додаток, щоб спершу зберегти, а потім знову вибрати дані, ви не побачите різниці в поведінці між save()і saveAndFlush()тому, що вибір спочатку запускає флеш. Дивіться документацію .


Вибачте, але якщо я saveсутність і знову та сама, ви маєте на увазі, saveщо друга команда не викине виключення для дублювання, наприклад ??
azerafati

3
@Bludream Так, на моє розуміння, дзвінки saveідентичні. Дивіться цю тему для більш детальної інформації.
Ральф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.