Я использую данные JPA Spring Boot для обновления столбца в моей таблице. Моя база данных Postgres. Я пытаюсь обновить значение столбца statusCode в моей БД. Я обновляю его до 6 из 1. Ниже приведен код для того же:
Репозиторий
public interface MailRecordRepository extends JpaRepository<MailRecords, Integer> {
// Fetch the rows which are new in status
List<MailRecords> findTop100ByEmailStatusCode(int statusCode);
// Update status to in-progress
@Modifying(flushAutomatically = true, clearAutomatically = true) //, flushAutomatically = true
@Query(value = "UPDATE users.usertbl SET statusCode = :inProgressStatusCode where " +
"statusCode = 1 RETURNING *;", nativeQuery = true)
public List<MailRecords> updateRecordsToInProgress(
@Param("inProgressStatusCode") int inProgressStatusCode);
}
Я пытаюсь получить обновленные строки с помощью RETURNING ключевое слово в моем родном запросе, который поддерживается Postgres. Я присваиваю обновленные строки, возвращенные запросом, списку и печатаю его в консоли. Но обновленный список возвращает старое значение для столбца statusCode, т. Е. 1 вместо обновленного значения, т. Е. 6 Ниже приведен код для того же самого:
ServiceClass
public class MailServiceImpl implements MailService {
@Autowired
private MailRecordRepository mailRecordRepository;
@Autowired
private MailHandler mailHandler;
@Autowired
private EntityManager entityManager;
@Override
public List<MailRecords> getMailRecords() {
return (List<MailRecords>) mailRecordRepository.findAll();
}
@Override
public List<MailRecords> processEmailRecords() {
//fetch records from DB which are in new status
List<MailRecords> mailRecordsToBeSent = mailRecordRepository.findTop100ByEmailStatusCode(1);
// update the status to in-progress
//entityManager.clear();
List<MailRecords> updatedMailRecords = mailRecordRepository.updateRecordsToInProgress(6);
return updatedMailRecords;
}
Если я использую метод очистки менеджера сущностей, обновленные значения будут отражены. Но я пытаюсь понять, почему свойство @Modifying(flushAutomatically = true, clearAutomatically = true)
не очищает значения кэша? Почему я должен вызывать entityManager.clear()
явно? Кто-нибудь может исправить мое понимание и указать, где я иду не так?