2015-03-01 6 views
2

У меня возникла проблема с моим приложением. Мое приложение читает сообщения из очередей и сохраняется в базе данных. Вставка записи хорошая. Но когда приходит обновление, оно отсутствует случайно. обновляется должным образом, но 10% записей не обновляются случайно. Большинство записей становится ниже является фрагментом кода я использую:Spring entitymanager

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

    @PersistenceContext 
    protected EntityManager entityManager; 

    @Override 
    public int updateTransaction(AuditRequest auditRequest) throws TesException { 

     LOG.info("updateTransaction : Updating Event Transaction"); 
     Query query = entityManager.createNamedQuery("updateEventTransactionQuery"); 
     query.setParameter("status", auditRequest.getStatus()); 
     query.setParameter("failureInfo", auditRequest.getFailureInfo()); 
     query.setParameter("endDateTimestamp", getTimestamp(auditRequest.getEndDateTime())); 
     query.setParameter("transUID", auditRequest.getTransUID()); 
     query.setParameter("transaction", auditRequest.getTransaction()); 
     return query.executeUpdate(); 

    } 
+0

Когда вы говорите, что не обновляетесь, вы имеете в виду, что обновление работает нормально, но обновляется 0 строк? –

+0

Да Стив. query.executeUpdate(); возвращается 0, когда я говорю, что не обновляюсь. – sskumar

+0

Steve Я вставляю новую запись, когда получаю запрос к моей службе и обновляю ту же запись, когда служба завершает вызов. Ниже приведена логика вставки. – sskumar

ответ

0

EntityManager необходимо промыть перед запуском запроса. Похоже, что в большинстве случаев это уже происходит, но когда новое EventTransaction еще не было записано в базу данных, обновить нечего. Затем транзакция базы данных совершается, и EntityManager очищается как часть процесса фиксации, записывая неизмененное событие EventTransaction в базу данных.

+0

Спасибо Стив за быстрый ответ. Мне нужно запустить флеш после правильного выполнения executeUpdate или вы имеете в виду до запуска запроса на обновление. Стив комментирует, почему он получает большую часть времени и не происходит в некоторых случаях. – sskumar

+0

Необходимо выполнить очистку перед запросом на обновление. Я предполагаю, что большую часть времени происходит промежуточная фиксация или какая-то другая часть вашего кода вызывает флеш. –

Смежные вопросы