DBUnitを使用してOracleデータベースに空間データを挿入し、ロールバックしようとしています。空間データを挿入するには、他のDBUnit Oracle拡張で空間データ型を取得するOracle10DataTypeFactoryを使用する必要があります。内部的には、OraclePreparedStatementへのキャストを行います。 OraclePreparedStatementを取得するには、OracleDataSourceを使用します。だから私は次のスプリング設定を使用するとき:OracleDataSource使用時にDBUnit/Springトランザクションがロールバックされない
<bean id="testDataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
<property name="URL" value="${database.url}"/>
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
<property name="implicitCachingEnabled" value="false" />
<property name="explicitCachingEnabled" value="false" />
<property name="connectionCachingEnabled" value="false" />
</bean>
インサートはロールバックされません。私はそれが次のテストのOracleDataSourceに関連付けられていることを知っています。空間データを必要としないテーブルに行を挿入します。次の構成を使用してください。
<bean id="testDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${user}/>
<property name="password" value="${password}"/>
</bean>
すべてが正常に動作し、テスト完了時にインサートがロールバックされます。前述のOracleDataSourceを使用して同じ正確なテストを実行し、忘れてください。何もロールバックされません。自動コミットがtrueに設定されているのを見てきましたが、残念ながらOracleはOracelDataSourceの設定方法を提供していません。私のテスト設定では、次のように明示的にfalseに設定しました。
connection = DataSourceUtils.getConnection(dataSource);
connection.setAutoCommit(false);
でも、それは無視されるようです。誰かが似たような状況に遭遇しましたか?