Уровень изоляции SERIALIZABLE в Spring-JDBC

Может быть, кто-нибудь может помочь мне с транзакционной проблемой в Spring (3.1) / Postgresql (8.4.11)

Мой транзакционный сервис выглядит следующим образом:

@Transactional(isolation = Isolation.SERIALIZABLE, readOnly = false)
@Override
public Foo insertObject(Bar bar) {

            // these methods are just examples
            int x = firstDao.getMaxNumberOfAllowedObjects(bar)
            int y = secondDao.getNumerOfExistingObjects(bar)
            // comparison
            if (x - y > 0){
                  secondDao.insertNewObject(...) 
            }
            ....
}

Конфигурация Spring Webapp содержит:

@Configuration 
@EnableTransactionManagement 
public class ....{
    @Bean
    public DataSource dataSource() {
        org.apache.tomcat.jdbc.pool.DataSource ds = new DataSource();

        ....configuration details

        return ds;
    }

    @Bean
    public DataSourceTransactionManager txManager() {
        return new DataSourceTransactionManager(dataSource());
    }
}

Давайте скажем запрос «х» и запрос "у" выполнить одновременно и получить оба комментариясравнение» (метод insertObject). Затем им обоим разрешается вставлять новый объект, и их транзакции фиксируются.

Почему у меня нет RollbackException? Насколько я знаю, для этого и нужен уровень Serializable. Возвращаясь к предыдущему сценарию, если x удастся вставить новый объект и зафиксировать его транзакцию, тогда "y" 'Не следует разрешать транзакцию s, поскольку есть новый объект, который он не читал.

То есть если "у" мог бы снова прочитать значение secondDao.getNumerOfExistingObjects (bar), он бы понял, что есть новый объект больше. Phantom?

Конфигурация транзакции работает нормально:

Для каждого запроса я вижу одно и то же соединение для firstDao и secondDao.Транзакция создается каждый раз, когда вызывается insertObject

Как первый, так и второй DAO:

@Autowired
public void setDataSource(DataSource dataSource) {
    this.jdbcTemplate = new JdbcTemplate(dataSource);
}

@Override
public Object daoMethod(Object param) {

        //uses jdbcTemplate

}

Я уверен, что что-то упустил. Любая идея?

Спасибо за ваше время,

Хавьер

Ответы на вопрос(1)

Ваш ответ на вопрос