Спящий режим при обновлении столбца, который не обновлялся при получении строки - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть сервисный слой, в котором мне нужно выбрать пример данных по идентификатору и выполнить некоторую проверку, если все в порядке, тогда я обновляю его статус. После обновления состояния я извлекаю ту же строку из БД и создаю файл.

При этом после обновления из-за кеша первого уровня состояние, которое я обновляю, не обновляется при использовании метода createFile ().

Я видел обходной путь, чтобы обновить статус вручную. Но есть ли лучший способ сделать вместо обновления статуса? Заранее спасибо.

Сервисный уровень

@Override
 update(String id){
    Sample sample= sampleDao.findById(id);
    // perform validation if all ok proceed

    sampleDao.updateStatus(id, status);
    createFile(id);
}

boolean createFile(String id) {
    Sample sample=  sampleDao.findById(id);
    // Do create file as based on 
}

sampleDao Layer

@Override
public Sample findById(String id) {
    return sampleRepository.findById(id).orElse(null);
}

@Override
@Transactional(readOnly = false)
public boolean updateStatus(String id,Integer status) {
    return this.sampleRepository.updateStatus(status, id) ;
}

sampleRepository

@Modifying()
    @Query("update Sample sample set sample.status.id = :status where sample.id = :id")
    Integer updateStatus(@Param("status") Integer status, @Param("id") String id);

sample Entity

class Sample {
    String id;  
    Status status;
 }

  class Status {
    String id;  
    String name;
 }

1 Ответ

0 голосов
/ 17 апреля 2020

Надеюсь, этот ответ может помочь, я решил эту проблему с помощью атрибута clearAutomatics

@Modifying(clearAutomatically=true)

Итак, когда я выполняю вызов findById (), фактически второй вызов идет в БД и выбирает.

Надеюсь, это полезно.

...