Блокировка операций записи в Hibernate - PullRequest
1 голос
/ 29 декабря 2011

Являются ли определенные операции записи в блокировке Hibernate? Я имею в виду, если я выполню:

session.save(data);

из метода, аннотируемого как @Transactional, гарантируется ли, что каждый

session.get(id);

вызов, поступающий из другого потока, выполненный сразу после этой строки, вернет правильные данные (не нуль)?

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

Результат, который вы получите, зависит от уровня изоляции транзакции.Spring допускает следующие уровни изоляции:

DEFAULT Использовать уровень изоляции по умолчанию для базового хранилища данных.

READ_COMMITTED Константа, указывающая, что грязное чтение предотвращено;Могут происходить неповторяемые чтения и фантомные чтения.

READ_UNCOMMITTED Константа, указывающая, что могут происходить грязные чтения, неповторяющиеся чтения и фантомные чтения.

REPEATABLE_READ Константа, указывающая, что грязные чтения иповторяющиеся чтения не допускаются;могут происходить фантомные чтения.

SERIALIZABLE Константа, указывающая, что грязные чтения, неповторяющиеся чтения и фантомные чтения предотвращаются.

Вызов save () (или flush ()) не выполняетне гарантирует, что сделка совершена.В случае, когда ваша транзакция (где вызывается save ()) фиксируется до вызова get (), вы ВСЕГДА получите правильный результат в новом потоке.Однако, если транзакция не зафиксирована, получите ли вы правильный результат или нет, зависит от уровня изоляции транзакции.Вы получите правильный результат в уровнях изоляции, которые разрешают «Грязное чтение».

0 голосов
/ 29 декабря 2011

Операции записи не являются блочными, если вы явно не используете пессимистическую блокировку.В транзакции то, что происходит, когда незафиксированное не будет видно никому за пределами этой транзакции (при условии уровня изоляции по умолчанию READ_COMMITTED).Как вы упомянули, save() и get() работают в разных потоках и, следовательно, в разных транзакциях, все зависит от того, был ли во время get () зафиксирован сохранение () или нет.

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