У меня есть приложение Spring с Hibernate в качестве базы данных ORM и Oracle в качестве RDBMS.Предположим, что имя моей таблицы в базе данных entity_tbl
, а entity_seq
- последовательность моей таблицы.
В методе сохранения с @Transaction
объект был сохранен, и после сохранения строки я выбрасываюисключение для транзакции отката.как показано ниже,
@Service
class EntityService extends GenericService<Entity>{
@Autowired
EntityRepository repo;
@Transactional
@Override
public void save(Entity entity) {
repo.save(entity);
if(true)
throw ApplicationException("just for Transaction rollback...")
}
}
В консоли приложения я вижу следующую строку:
select entity_seq.nextval from dual
Если я выполню этот запрос на PL / SQL, entity_seq
увеличится и entity_seq.currval
будетновое значение.Но после отката транзакции в приведенном выше коде entity_seq.currval
имеет прежнее значение и не увеличивается.
Поэтому мой вопрос: уменьшает ли Oracle последовательность после отката транзакции?или временная таблица оракула отменить это увеличение?или Hibernate справиться с этим?Другими словами, мой вопрос, почему последовательность после того, как я вижу select entity_seq.nextval from dual
в консоли приложения, не изменилась?
Буду признателен за любую помощь!