2013-08-21 3 views
0

Я знаю, что подобные вопросы могут привести к пламенным войнам. Лично я большой поклонник nHibernate, и я понимаю, что ORM не идеальна. Я просто пытаюсь определить, есть ли веские причины для этого, о котором я не знаю, или если это недостаток дизайна, который существует, потому что изменение этого приведет к поломке существующего кода.Должно ли nHibernate ISession.BeginTransaction() терпеть неудачу, когда транзакция уже открыта?

Вот поведение, что я описываю:

Предполагая, что у меня есть существующий ISessionsession имени не следующий код сгенерирует исключение на третьей линии в связи с тем, что NHibernate не поддерживает вложенные транзакции.

ITransaction tx = null; 
tx = session.BeginTransaction(); 
tx = session.BeginTransaction(); 

Если мы предположим, что нет никаких других операций, открытых на текущем потоке, первый вызов BeginTransaction() действительно начать транзакцию. Однако второй просто возвращает существующую транзакцию. Это производит впечатление, что поддерживаются вложенные транзакции. Это плохая номенклатура?

Было бы разумнее создать два метода? Один для захвата существующей транзакции или, создающей один, если ни один не существует в ситуациях, когда разработчику все равно, и другой метод, который конкретно создает новые транзакции и терпит неудачу, когда он не может?

Этот вопрос касается nHibernate, но, возможно, это относится и к Hibernate.

ответ

1

Почтовый адрес How do I do nested transactions in NHibernate? содержит ссылку на http://rajputyh.blogspot.com/2011/02/nested-transaction-handling-with.html, в которой содержится код для решения этой проблемы. (Отказ от ответственности: я не пробовал код, но раньше сталкивался с ним при исследовании другой проблемы.)

Смежные вопросы