У меня есть две разные партии (B1 и B2), работающие одновременно. У каждого пакета есть транзакционный сервис, который выполняет обновление для одной и той же таблицы.
Во-первых, в PostGreSQL объявлена последовательность:
CREATE SEQUENCE mySeq
MINVALUE 0
MAXVALUE 99999999999
START WITH 1
INCREMENT BY 50
CACHE value;
И мой сущностный бин ссылается на эту последовательность, как показано ниже:
@Entity
public class MyBean{
@GeneratedValue(generator = "SEC_ID", strategy =GenerationType.SEQUENCE)
@SequenceGenerator(name = "SEC_ID", sequenceName ="mySeq",allocationSize=50)
private long id;
}
А транзакционная служба делает вставку в таблицу:
@Service
@Transactional
public class MyService{
@Autowired
private MyDao myDao
.....
public void insertIntoDB(List<MyBean> beans){
for(MyBean bean : beans){
myDao.saveOrUpdate(bean);
}
}
}
Сценарий выполнения:
Напомним, что пакеты B1 и B2 запускаются одновременно на сервере jboss, как показано ниже:
a) Пакет B1 вставляет вхождения в таблицу A со значением id от 0 до 100 (начиная с момента T1 и заканчивая на T2).
b) Пакет B2 вставляет вхождения в таблицу A со значением id от 150 до 190 (150 из-за приращения, определенного в последовательности) (начиная с момента времени T2 и заканчивая с момента времени T3).
c) Пакет B1 вставляет вхождения в таблицу A со значением id от 101 до 130 (начиная с момента T3 и заканчивая на T4).
При втором запуске пакета B1 (начиная с момента времени T3) идентификатор таблицы начинается с 101, а не с 191.
Как мне поступить, чтобы при втором прогоне партии B1 после прохождения партии B2 идентификатор равнялся 191?
Заранее благодарим за ваш ответ.