[seasar-dotnet:508] 自動生成 Insert、Update、Delete文のトランザクションが効かない
KIYOSUE Minoru
[E-MAIL ADDRESS DELETED]
2007年 6月 16日 (土) 02:26:04 JST
いつもお世話になっております、清末と申します。
先日、S2Dao.dllがロードされない件は無事解消し、実装を進めておりましたが、
今度は、自動生成のSQL(Insert/Update/Delete)で、トランザクションが効かな
い状況となってしまいました。
----- ado.diconの定義 --------->>
<components namespace="ado">
<!--
====================================================================== -->
<!-- .NET Framework Data Provider for SQL Server を使用する場合に必要です。
-->
<!--
====================================================================== -->
<component name="SqlClient" class="Seasar.Extension.ADO.DataProvider">
<property
name="ConnectionType">"System.Data.SqlClient.SqlConnection"</property>
<property
name="CommandType">"System.Data.SqlClient.SqlCommand"</property>
<property
name="ParameterType">"System.Data.SqlClient.SqlParameter"</property>
<property
name="DataAdapterType">"System.Data.SqlClient.SqlDataAdapter"</property>
</component>
<component name="DataSource"
class="Seasar.Extension.Tx.Impl.TxDataSource">
<property name="DataProvider">SqlClient</property>
<property
name="ConnectionString">"Server=naga\\SQLEXPRESS;database=NTKDB;Integrated
Security=SSPI"</property>
</component>
<!-- ローカルトランザクション用のインターセプターで使用します。 -->
<component class="Seasar.Extension.Tx.Impl.TransactionContext" />
</components>
----- ado.diconの定義 ---------<<
----- Tx.diconの定義 --------->>
<components namespace="Tx">
<include path="dicon/ado.dicon" />
<component name="TransactionStateHandler"
class="Seasar.Extension.Tx.Impl.TransactionStateHandler" />
<component name="RequiredTx"
class="Seasar.Extension.Tx.TransactionInterceptor">
<arg><component class="Seasar.Extension.Tx.Impl.RequiredTxHandler"
/></arg>
</component>
</components>
----- Tx.diconの定義 ---------<<
利用しているDiconの定義
<include path="dicon/aop.dicon" />
<include path="dicon/ado.dicon" />
<include path="dicon/s2dao.dicon" />
<include path="dicon/dao.dicon" />
<include path="dicon/daoex.dicon" />
<include path="dicon/LocalTx.dicon" />
<include path="dicon/Tx.dicon" />
<!--
===================================================================== -->
<!-- s2daotestサービ -->
<!--
===================================================================== -->
<component name="IS2daotestService"
class="NtkProjectCore.bl.winapp.s2daotest.impl.IS2daotestServiceImpl">
<aspect>Tx.RequiredTx</aspect>
<aspect>aop.traceInterceptor</aspect>
<!-- 担当者マスタDAO(基本) -->
<arg>dao.INttb01ChargePersonDao</arg>
<!--コンスタントマスタDAO(基本)-->
<arg>dao.INttb09ConstantDao</arg>
</component>
Daoの定義
<Bean(GetType(Nttb09ConstantEntity))> _
Public Interface INttb09ConstantDao
''' <summary>
''' INSERT
''' </summary>
''' <param name="vo">バリューオブジェクト。 </param>
''' <returns> 処理対象件数。 </returns>
Function Insert(ByVal vo As Nttb09ConstantEntity) As Integer
''' <summary>
''' UPDATE
''' </summary>
''' <param name="vo">バリューオブジェクト。 </param>
''' <returns> 処理対象件数。 </returns>
Function Update(ByVal vo As Nttb09ConstantEntity) As Integer
''' <summary>
''' DELETE
''' </summary>
''' <param name="vo">バリューオブジェクト。 </param>
''' <returns> 処理対象件数。 </returns>
Function delete(ByVal vo As Nttb09ConstantEntity) As Integer
s2daotestサービス 側での実行
For Each objEntity In list
~~~~ *1
Dim intCount As Integer
intCount = _Nttb09ConstantDao.Insert(objEntity)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *2
If intCount <> 1 Then
'エラー
strMsgID = "EEE"
End If
intRtnCount += intCount
Next
テストで、list(*1)に同じプライマリ・キー値を持つEntityをセットし、呼び出しております。
2重登録エラーが *2 で発生しますが、1件目は登録されてしまいます。
トランザクションが効いていれば、1件目もロールバックされるものと思いますが
何の指定に誤りがあるのでしょうか。
また、トランザクションの状態を知る方法(トランザクションがスタートしているかなど)が
ございますでしょうか。
長文になり大変申し訳ございません。
どうぞご教授下さいますようお願い申し上げます。
seasar-dotnet メーリングリストの案内