Когда я пытаюсь вызвать процедуру из моего приложения получил сообщение об ошибке сказав ORA-01002: выборка из последовательностиORA-01002: выборка из последовательности при использовании @Transactional
технологии, используемые:
- Mybatis 3
- Spring MVC
интересный момент здесь ошибка возникает только в том случае, если я использую аннотацию для вызывающего метода в классе обслуживания @Transactional (org.springframework.transaction.annotation.Transactional). Если я удалю @Transactional, тогда нет ошибки ORA.
Я использую @Transactional, поскольку у меня есть несколько DAO, введенных в Сервис. Пожалуйста, найдите мой код, вставленный ниже.
@Transactional
public boolean saveavgFlyHrs(AverageFlyingHoursReport averageFlyingHoursReport) throws TransactionDataException {
String status = null;
boolean isOk = false;
if(averageFlyingHoursReportDAO.saveavgFlyHrs(averageFlyingHoursReport)) {
status = averageFlyingHoursReportDAO.updateCheckEff(averageFlyingHoursReport.getSubFleet());
logger.debug("OUT_STATUS:"+status);
if(ConstantStringUtil.SUCCESS.equalsIgnoreCase(status)) {
isOk = true;
} else {
isOk = false;
}
}
return isOk;
}
Любое PLS поможет мне с этим.
Hi Vincent, Отлично !! вы абсолютно правы. Спасибо за эти полезные объяснения. Я дал фиксацию в своей процедуре после каждого обновления, которое подпадает под описанный вами сценарий 1. Вы предлагаете удалить фиксацию из процедуры или удалить @Transactional? – prabu
@prabu В идеале только основная программа должна решить, когда совершать, потому что только она знает, что представляет собой транзакцию. Я не уверен, что понимаю все тонкости '@ Transactional', но я думаю, что небольшие методы и подтемы не должны иметь этот атрибут, поскольку они не являются независимой транзакцией. Следуя той же логике, если у вас есть процедуры Oracle, они не должны фиксировать себя, они должны позволить клиенту (здесь вызывающее приложение) решать, когда/если совершить. –
Спасибо Винсент !! Будет реализовываться, как было предложено вами, поскольку идея выглядит многообещающей. – prabu