#nhibernate #spring.net #isolation-level #spring-transactions
#nhibernate #spring.net #уровень изоляции #spring-транзакции
Вопрос:
При использовании атрибута Transaction() в методе уровень изоляции по умолчанию устанавливается на чтение. Что я хочу сделать, так это установить уровень изоляции по умолчанию на ReadUncommitted весной.Конфигурация сети (чтобы не изменять все определения атрибутов транзакции, которые существуют в настоящее время)
Как мне это сделать? Можно ли это сделать с помощью Spring.NET 1.2 ?
Я пытался следовать документации, используя tx: advice и т. Д., Но безрезультатно.
Я даже перешел к коду Spring с помощью Reflector, но все, что я, кажется, понимаю из этого, это то, что Spring просто считывает настройки из объявления атрибута в методе.
Можно ли это сделать или мне придется пройти через код и изменить атрибут там, где это необходимо?
Ответ №1:
Обычно я использую, например:
[Transaction( IsolationLevel.ReadUncommitted )]
в моих методах репозитория. И это работает в сочетании с <tx:attribute-driven transaction-manager="HibernateTransactionManager"/>
.
<object
name="HibernateTransactionManager"
type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate32"
dependency-check="none">
<property name="DbProvider" ref="MsSqlDbProvider"/>
<property name="SessionFactory" ref="SessionFactory"/>
</object>
Комментарии:
1. Спасибо, Андреас, но я на самом деле пытаюсь понять, могу ли я избежать этого, установив в файле конфигурации значение по умолчанию (для всех методов) IsolationLevel.ReadUncommitted, все еще используя [Transaction()] . Я подозреваю, что это невозможно, хотя:-(
Ответ №2:
Вы должны иметь возможность создать свой собственный перехватчик транзакций, который расширяет стандартный перехватчик транзакций. А затем подключите его, используя ObjectNameAutoProxyCreator вместо TransactionProxyFactoryObject, на который вы ссылались.
Комментарии:
1. Если я найду время, я попытаюсь это закодировать, но, вероятно, это будет не скоро.