Что происходит с состоянием спящего объекта после вызова API? - PullRequest
0 голосов
/ 21 апреля 2019

У меня возникают проблемы с пониманием переходов между состояниями спящего объекта 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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...