不应该';t nHibernate ISession.BeginTransaction()在事务已打开时失败?
我知道这类问题会引发激烈的战争。就我个人而言,我是nHibernate的超级粉丝,我意识到没有什么ORM是完美的。我只是想确定这是否有一个我不知道的原因,或者这是否是一个存在的设计缺陷,因为更改它会破坏现有的代码 以下是我描述的行为: 假设我有一个名为不应该';t nHibernate ISession.BeginTransaction()在事务已打开时失败?,hibernate,nhibernate,Hibernate,Nhibernate,我知道这类问题会引发激烈的战争。就我个人而言,我是nHibernate的超级粉丝,我意识到没有什么ORM是完美的。我只是想确定这是否有一个我不知道的原因,或者这是否是一个存在的设计缺陷,因为更改它会破坏现有的代码 以下是我描述的行为: 假设我有一个名为session的现有ISession,下面的代码不应该在第三行抛出异常,因为nHibernate不支持嵌套事务 ITransaction tx = null; tx = session.BeginTransaction(); tx = sessio
session
的现有ISession
,下面的代码不应该在第三行抛出异常,因为nHibernate不支持嵌套事务
ITransaction tx = null;
tx = session.BeginTransaction();
tx = session.BeginTransaction();
如果我们假设当前线程上没有打开其他事务,那么对BeginTransaction()
的第一次调用确实会开始一个事务。但是,第二个仅返回现有事务。它给人的印象是支持嵌套事务。这个命名法不好吗
创建两种方法是否更有意义?一个用于抓取现有事务,或者在开发人员不关心的情况下创建一个事务(如果不存在),另一个方法专门创建新事务,但无法创建时失败
这个问题是关于nHibernate的,但也许这也适用于Hibernate。这篇文章包含到的链接,其中提供了处理这种情况的代码。(免责声明:我没有尝试过该代码,但之前在研究其他问题时遇到过。)