Я пытаюсь использовать DBUnit, чтобы вставить пространственные данные в базу данных Oracle, а затем откатить их. Чтобы вставить пространственные данные, я должен использовать Oracle10DataTypeFactory, которая использует другие расширения Oracle DBUnit для пространственных типов данных. Внутри они будут выполнять приведение к OraclePreparedStatement. Чтобы получить OraclePreparedStatement, я использую OracleDataSource. Поэтому, когда я использую следующую конфигурацию 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, как показано ранее, забудьте, ничего не откатывается. Я видел, что для autocommit задано значение true, но, к сожалению, Oracle не предоставляет метод для настройки на OracelDataSource, по крайней мере, тот, который я не смог найти. Поэтому в моей тестовой настройке я явно установил значение false со следующим:
connection = DataSourceUtils.getConnection(dataSource);
connection.setAutoCommit(false);
Но даже это, кажется, игнорируется. Кто-нибудь сталкивался с подобной ситуацией?