У меня есть код с этой структурой (есть много классов, но схема такая:
void f() {
MyObj o = db.getById(id);
o.setField1(value);
db.update(o);
o = db.getById(id);
assertEquals(value, o.getField());
}
методы update и get используют один и тот же источник данных, внедренный в Spring. получить работу через JdbcTemplate, а обновление просто берет соединение из источника данных и использует сырой JDBC.
Обновление помечено аннотацией @Transactional.
Вот определение Transacion Manager из конфигурации Spring:
<tx:annotation-driven transaction-manager="TransactionManager"/>
<bean id="TransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
Проблема в том, что если я использую update и после него получаю разные вызовы методов веб-сервиса, которые используют их, например, результат верный, и я получаю обновленные значения.
И если я вызываю их последовательно в одном методе модульного теста после обновления, я не вижу обновленного значения.
Я не могу опубликовать весь код для чтения / записи здесь, потому что он большой и разбит на множество файлов, но, возможно, у вас есть идеи, как это исправить.
Спасибо.