Я не уверен, что я спрашиваю его правильно, но у меня есть метод, который является транзакционным, и в этом я получаю список элементов. Теперь, обрабатывая один из элементов, я сталкиваюсь с недопустимым исключением использования данных. [Null передается в репозиторий, и штраф один выдает это исключение, и это нормально), и после получения этого исключения я его поймаю и отмечаю, что элемент обработанный «сбой». Транзакционный метод заканчивается, но изменения не проходят.Весна JPA - сущность отсоединена? на исключениях?
@Transactional
public void method(){
try{
List items = itemRepo.getItems(NOT_SUBMITTED);
for(Item item: items){
processItem(item); //this is where the exception happens
}
}
catch(Exception e){
item.setStatus(FAILED) // this doesn't go through to the db
}
}
private void processItem(Item item){
otherRepo.findOne(item.X); //item.X is null, and I get "invalid data usage" exception
}
Я думаю, что объект как-то отделяется; не знаю почему. Я сделал тест, выбрав исключение самостоятельно в блоке try, работал отлично. Статус был правильно отражен.
Я попытался захватить этот объект снова, сделав itemRepo.findOne (item) .setState (FAILED), не сработал. Я пробовал, itemRepo.save (item) - не работал.
Любые указатели?
Благодаря
Это не должно даже компилироваться. 'item' находится вне области действия в блоке catch. – digitaljoel
Пожалуйста, отформатируйте код - его трудно прочитать. Кроме того, показать трассировку стека - из описания это не ясно - это findOne(), который генерирует исключение? –
, потому что этот код не компилируется, это не тот код, который вы используете, я думаю, что проблема в том, что исключение (это исключение во время выполнения) и оставляют метод аннотированным с помощью @Transactional, а те же весенние роли ist bal – Ralph