Как распространение транзакции работает при использовании Открытого заседания В поле зрения?

SQL Красного Логического элемента Выдерживает сравнение, продукт не только позволяет Вам делать сравнения уровня объектов и генерировать сценарии изменения от этого, но это также позволяет Вам экспортировать свои объекты базы данных в иерархию папок, организованную типом объекта с одним [имя объекта] .sql сценарий создания на объект в этих каталогах. Иерархия типа объекта похожа на это:

процедуры \Functions
\Security
\Security\Roles
\Security\Schemas
\Security\Users
\Stored
\Tables

при дампе сценариев к тому же корневому каталогу после внесения изменений можно использовать это, чтобы обновить SVN repo и сохранить под управлением историю каждого объекта индивидуально.

7
задан skaffman 2 January 2010 в 23:46
поделиться

3 ответа

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

На самом деле шаблон сеанса на транзакцию альтернатива OSIV. Этот шаблон встречается не часто.

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

Просто потому, что транзакция переводится в режим только для чтения для одной транзакции, это не означает, что она останется в режиме только для чтения для остальной части области сеанса (OSIV). Фактически, последующие транзакции в рамках открытого сеанса могут даже не происходить в одном и том же соединении.

2
ответ дан 6 December 2019 в 23:07
поделиться

Жизненный цикл спящих сессий отличается от жизненного цикла транзакций. Они могут перекрывать друг друга.

В случае OpenSessionInViewFilter, это вообще не имеет никакого отношения к транзакциям, он просто управляет жизненным циклом спящего сеанса во время запроса. При вызове метода Spring-transactional начинается новая транзакция, которая ассоциируется с спящей сессией, а затем фиксируется/откатывается назад при выходе из метода. После завершения запроса сессия закрывается фильтром. Нет необходимости запускать/завершать транзакцию одновременно с сессией.

Что касается вопроса о транзакции только для чтения (что, кстати, совсем другая проблема), то это действительно не более чем намек на то, что данные не будут изменены. Никогда не видел, чтобы это имело конкретный эффект, хотя, похоже, что это более полезно в качестве инструмента документирования, чем что-либо другое.

.
6
ответ дан 6 December 2019 в 23:07
поделиться

Если вы вызываете метод транзакции чтения-записи из метода транзакции только для чтения, также будет распространяться статус "только для чтения". Т.е. вся транзакция будет доступна только для чтения. Вы, вероятно, захотите изменить метод вызова на read-write, потому что транзакция на самом деле должна быть read-write.

Или вы можете использовать REQUIRES_NEW распространение, но в этом случае весна создаст еще один сеанс на время жизни новой транзакции. Используйте только если новая транзакция действительно необходима.

Спящий сеанс может содержать несколько последовательных транзакций. Таким образом, фильтру OSIV не нужно знать, какие транзакции он будет содержать. Фильтр OSIV создает сессию с FlushMode=MANUAL и методы чтения-записи транзакций временно изменяют ее на FlushMode=AUTO. Каждая транзакция будет использовать JDBC соединение либо только для чтения, либо для чтения-записи.

.
3
ответ дан 6 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: