当事务已经打开时,nHibernate ISession.BeginTransaction()是否会失败?

时间:2013-08-21 17:57:15

标签: hibernate nhibernate

我知道这些问题会导致火焰战争。就个人而言,我是nHibernate的忠实粉丝,我意识到没有ORM是完美的。我只是想确定是否有一个很好的理由让我不知道或者它是否存在设计缺陷,因为更改它会破坏现有代码。

以下是我所描述的行为:

假设我有一个名为ISession的现有session,则以下代码在第三行引发异常,因为nHibernate不支持嵌套事务。

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

如果我们假设当前线程没有打开其他事务,则对BeginTransaction()的第一次调用确实开始了事务。但是, second 仅返回现有的事务。 给出了支持嵌套事务的印象。这是一个错误的命名法吗?

创建两个方法会更有意义吗?一个用于抓取现有事务创建一个,如果在开发人员不关心的情况下不存在,另一个专门创建新事务的方法,并且当它不能?

这个问题是关于nHibernate的,但也许这也适用于Hibernate。

1 个答案:

答案 0 :(得分:1)

帖子How do I do nested transactions in NHibernate?包含指向http://rajputyh.blogspot.com/2011/02/nested-transaction-handling-with.html的链接,该链接提供了处理此情况的代码。 (免责声明:我没有尝试过这些代码,但之前在研究其他问题时遇到过这种情况。)