Объект не управляет исключением при вызове refresh () из весеннего планировщика - PullRequest
0 голосов
/ 03 июля 2019

В своем приложении я создал класс планировщика. Из этого класса я вызываю сервисный метод, который не является отдельной транзакцией. Транзакция управляется на уровне хранилища. Код будет выглядеть так:

public void doAction(int id){
  User user = repository.getUser(id);//transaction 1
   repository.updateStatus(user);// transaction 2
   repository.refresh():// call entityManager.refresh() internally
}

После получения объекта User из репозитория я обновляю статус. Затем сущность пользователя будет обновлена ​​путем вызова entityManager.refresh (). Но при вызове refresh () выдается исключение: InvalidArgumentException: объект не управляется. Три звонка - это три разные транзакции.

Но я пытаюсь вызвать этот метод (doAction) из Spring Controller, он работает нормально. Но вызов из класса планировщика не удался.

1 Ответ

0 голосов
/ 03 июля 2019

Поскольку эти звонки осуществляются в рамках их собственных транзакций, вам необходимо позвонить:

entityManager.merge(user);

, прежде чем позвонить на refresh(user). Этот объект должен находиться в управляемом состоянии контекста постоянства, прежде чем выполнять эту операцию. А когда предыдущая транзакция заканчивается, она находится в отключенном состоянии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...