Уровень изоляции 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());
    }
}

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

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

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

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

For each request I can see the same connection for firstDao and secondDao A transaction is created everytime insertObject is invoked

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

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

@Override
public Object daoMethod(Object param) {

        //uses jdbcTemplate

}

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

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

Хавьер

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

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