2

「Bag」によってマップされた「IList<>」を含むオブジェクトで DAO の Save() を 2 回呼び出すと、「コレクションを 2 つの開いているセッションに関連付ける不正な試み」という例外が発生します。

public abstract class AbstractGenericDao<TEntity> : HibernateDaoSupport, IAbstractGenericDao<TEntity>
{
  [Transaction]
  public TEntity Save( [NotNull] TEntity entity )
  {
    HibernateTemplate.Save( entity );
  }
}

2 つの SessionFactory を使用しています

<!-- NHibernate Configuration -->
<object id="NHibernateSessionFactory" abstract="true" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate32">
  <property name="HibernateProperties">
    <dictionary>
      <entry key="connection.provider" value="${connection.provider}" />
      <entry key="connection.driver_class" value="${hibernate.driver}" />
      <entry key="dialect" value="${hibernate.dialect}" />
      <entry key="hbm2ddl.auto" value="${hibernate.hbm2ddl}" />
      <entry key="show_sql" value="${hibernate.show_sql}" />
    </dictionary>
  </property>
</object>

<!-- NHibernate Session Configuration -->
<object id="NHibernateSessionFactory_1" parent="NHibernateSessionFactory" >
  <property name="DbProvider" ref="DbProvider_Main" />
  <property name="MappingAssemblies">
    <list>
      <value>DomainModel</value>
    </list>
  </property>
  <property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>

<!-- NHibernate Session Configuration -->
<object id="NHibernateSessionFactory_2" parent="NHibernateSessionFactory" >
  <property name="DbProvider" ref="DbProvider_Exam" />
  <property name="MappingAssemblies">
    <list>
      <value>DomainModel</value>
    </list>
  </property>
  <property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>

および「TxScopeTransactionManager」:

<object id="transactionManager" type="Spring.Data.Core.TxScopeTransactionManager, Spring.Data">
    <property name="TransactionSynchronization" value="Always"/>
</object>

誰でも私を助けることができますか?

4

0 に答える 0