2013-09-09 4 views
0

Я делаю обновление собственного запроса в моем репозитории JPA Spring Data.Обновления и транзакции в Spring Data JPA

@Query(nativeQuery=true, value="update t_table set change = 0 where id = ?1") 
@Modifying(clearAutomatically=false) 
void disableChange(int id); 

Значения обновляются в правильном пути, как я могу видеть мой клиент базы данных, но последующие транзакции не признавая изменений, пока сервер не будет перераспределен.

Моя служба выглядит следующим образом:

@Service("my.service.class.service") 
public final class MyServiceClassImpl implements MyServiceClass 
{ 

    @Autowired 
    private ClientRepository clientRepository; 


    @Override 
    @Secured("MY_ROLE") 
    @Transactional(propagation=Propagation.REQUIRES_NEW, rollbackFor=MyException.class) 
    public void myMethod() throws PlayTheGuruException 
    { 
     // 
     myMethod(); 
     // 
    } 

    private void myMethod() throws MyException { 
     // 
     clientRepository.disableChange(22); 
     // 
    } 
} 

Может мне нужно аннотировать myMethod с транзакционной и обязательного распространения или что-то подобное?

Является ли родной запрос проблемой?

Эта проблема возникает только при обновлении запросов.

ответ

1

Выглядит как устаревшее значение из кеша L2, если для рассматриваемого объекта включен L2-кеш.

Попытка удалить пораженный объект из кэша L2 вручную:

@Autowired EntityManagerFactory emf; 

... 

clientRepository.disableChange(22); 
emf.getCache().evict(..., 22); 
Смежные вопросы