У меня возникают проблемы с пониманием переходов между состояниями спящего объекта Course в моем коде, когда я отправляю HTTP-запрос конечной точке, которую я настроил. В одном классе я извлекаю курс из базы данных, используя метод поиска EntityManager. Затем я отправляю HTTP-запрос другому классу, который выбирает тот же курс и обновляет его поле «Английский». Как только я получу ответ от HTTP-вызова, я ожидаю, что курс будет иметь тему «Английский»; тем не менее, он отображается только в базе данных, но сам класс Course по-прежнему имеет «Math». Теперь, если я произвожу обновление имени до «Test2», это обновление будет отображаться в классе Course и базе данных, но поле темы возвращается к «Math» в базе данных. Может кто-нибудь, пожалуйста, помогите мне понять?
Насколько я понимаю, курс находится в управляемом состоянии в методе runCourse после вызова findById. То же самое для метода updateCourse. После завершения метода updateCourse обновление сбрасывается в базу данных. Когда он вернется к методу runCourse, я ожидаю, что обновленное поле темы также будет распространено. Или, по крайней мере, если я сделаю еще один вызов для того же идентификатора CourseId, я должен получить обновленное значение поля субъекта. Но этого не происходит.
public void runCourse() {
logger.info("In run course...");
Course course = courseRepo.findById(10001L);
logger.info("Course 10001 -> {}", course);
// CourseId - 10001, Name - Test1, Subject - Math
logger.info("Calling api...");
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Content-type", "application/json");
HttpEntity<String> entity = new HttpEntity<String>("{\"courseId\":\"10001\"}", httpHeaders);
ResponseEntity<String> response = restTemplate.exchange("http://localhost:8080/updateCourse", HttpMethod.PUT,
entity, String.class);
logger.info("Course after api call -> {}", course);
// CourseId - 10001, Name - Test1, Subject - Math -- in log
// CourseId - 10001, Name - Test1, Subject - English -- in database
course.setName("Test2");
logger.info("Final course -> {}", course);
// CourseId - 10001, Name - Test2, Subject - Math -- in log and database
}
public void updateCourse(TestJson testJson) {
logger.info(testJson.toString());
logger.info("In update course...");
Long courseId = testJson.getCourseId();
Course course = courseRepo.findById(courseId);
course.setSubject("English");
logger.info("Updated course -> {}", course);
// CourseId - 10001, Name - Test1, Subject - English
}