Сохраните и обновите объект с проблемой EJB 2.0 и JPA (Toplink) - PullRequest
3 голосов
/ 11 марта 2011

Из моего клиентского приложения я хочу вызвать хранилище и обновить его в одном методе EJB вместо двух вызовов двух методов. Я создал EJB-метод, заставил его вызывать два других EJB-метода, и он выглядит просто, как здесь:

 public ZippedObjectWrapper saveAndRefresh(final Item p_item) {
    Long itemSavedId= save(p_item);
    return refresh(itemSavedId);
  }

Проблема в том, что Toplink не позволяет мне читать данные и в части обновления выдает исключение:

Исключение [TOPLINK-7123] Описание исключения: успешный writeChanges () был вызван на этом UnitOfWork. Поскольку процесс фиксации был запущен, но еще не завершен, единственными поддерживаемыми операциями теперь являются коммит, commitAndResume, release, любой запрос не объектного уровня или выполнение SQLCall. Операция executeQuery (ObjectLevelReadQuery) в настоящее время не разрешена.

Есть предложения?

РЕДАКТИРОВАТЬ: Изменены сигнатуры метода.

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Не уверен, что делает ваш метод save (), но я предполагаю, что вы вызываете writeChanges () для вашего UnitOfWork. Запросы не разрешались после writeChanges () в используемой вами версии. Удаление writeChanges () должно решить проблему.

Если вы обновитесь до EclipseLink и JPA, вы можете использовать flush () несколько раз в транзакции и выполнять запрос после. Вы также можете вручную использовать RepeatableWriteUnitOfWork вместо UnitOfWork, чтобы включить множественные вызовы writeChanges () и разрешить запросы.

0 голосов
/ 07 апреля 2011

Проблема в Toplink, особенно в том, как он обрабатывает операции с базой данных в используемой нами версии.Существует частичное решение, когда вы расширяете класс Toplink или, что лучше, обновляете Toplink:)

...