私のトランザクションで奇妙な問題が発生しています。データベースをプロファイリングした後、開始前に春がトランザクションをコミットしているように見えますか?ここで春のトランザクションがコミットしていません
は私が..
SQL:BatchStarting select 1
SQL:BatchCompleted select 1
SQL:BatchStarting IF @@TRANCOUNT > 0 COMMIT TRAN
SQL:BatchCompleted IF @@TRANCOUNT > 0 COMMIT TRAN
RPC:Completed exec vbosv_DLLVersion_Update 77,N'15',NULL,N'12.2.2.1',N'12.2.3.4'
取引は、この場合にはコミットされませんが、私は再び、データベースを呼び出して、この後のコードの一部を実行する場合、それは以前にコミットしますプロファイラを見ていますものですトランザクション。私はそれがIF @@TRANCOUNT > 0 COMMIT TRAN
で始まるので、それがコミットしていると思います。私はここに宣言的トランザクション管理を使用して
は私のconfigsの一部が
<!-- Transactional Advice -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="process*" rollback-for="Throwable"/>
<tx:method name="write*" rollback-for="Throwable"/>
<tx:method name="upload*" rollback-for="Throwable"/>
<tx:method name="store*" rollback-for="Throwable"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="dataServicesOperation" expression="execution(* com.enterprise.dataservices.DataServicesImpl.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="dataServicesOperation"/>
</aop:config>
私は春の初心者だと、ソートのここで起こっていただきました!に失われています。先にありがとう、助けてくれてありがとう
トランザクションがコミットされていないと正確に信じるにはどうすればいいですか?あなたは、実際にデータベースサーバーにオープンなトランザクションがあることを検証しましたか? –
実際にはロールバックしているようです。私はトランザクションで私はデバッグし、私はデータベースから選択することはできませんトランザクションになるはずのメソッドにステップするので、私は知っている。メソッドが完了すると、次に選択することができますが、データはdbに挿入されません。私は正確なexecコマンドをコピーして、 "exec vbosv_DLLVersion_Update 77、N'15 '、NULL、N'12.2.2.1'、N'12.2.3.4 '"をログに記録すると、データベースを正常に更新します。何らかの理由で私のアプリケーションはdbにこれらの更新をコミットできません。 – Tbonebrad
私はこのすべてをjunitテストから実行しています。このテストはファイルの最後のテストです。このテストを最後の2番目のテストに移行すると、データはデータベースに正常にコミットされます。 – Tbonebrad