JPA: выборка данных из БД вместо контекста сопротивления - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть простое приложение учетной записи пользователя, в котором пользователь может изменять свои данные.

Обновление базы данных

Метод управляемого компонента, который принимает параметры формы и вызывает метод Service:

public String changeDetails(){
    Date date = DateUtil.getDate(birthDate);
    Integer id = getAuthUser().getId();
    UserDetail newDetails = new UserDetail(id, occupation, date, originCity, residenceCity, description);

    EntityTransaction transaction = getTransaction();
    userService.updateDetail(newDetails);
    transaction.commit();

    return null;
}

Способ обслуживания:

public boolean updateDetail(UserDetail newDetails) {
    boolean ok = true;
    if (newDetails != null) {
        UserDetail user = readDetail(newDetails.getId());

        user.setOccupation(newDetails.getOccupation());
        user.setOriginCity(newDetails.getOriginCity());
        user.setResidenceCity(newDetails.getResidenceCity());
        user.setBirth(newDetails.getBirth());
        user.setDescription(newDetails.getDescription());
    }
    return ok;
}

Извлечение данных из БД

@PostConstruct
public void init(){
    userService = new UserService();
    sessionController.setAuthUser(userService.read(getAuthUser().getId()));
    originCity = getAuthUser().getUserDetail().getOriginCity();
    residenceCity = getAuthUser().getUserDetail().getResidenceCity();
    occupation = getAuthUser().getUserDetail().getOccupation();
    birthDate = DateUtil.getStringDate(getAuthUser().getUserDetail().getBirth());
    description = getAuthUser().getUserDetail().getDescription();
}

Проблема в том, что поведение этого кода отличается. Иногда я получаю желаемый результат: как только я отправляю новые данные и набираю @PostConstruct init (), новые данные печатаются. Иногда другие старые данные печатаются, хотя запись в БД обновляется.

Вывод: Иногда JPA приносит мне результат, отличный от того, что находится в БД. Я предполагаю, что эти результаты состоят из данных из контекста персистентности, данные, которые не обновляются. Есть ли способ, которым я могу быть уверен, что JPA всегда приносит данные непосредственно из БД? Или мне чего-то не хватает?

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Если вы используете JPA 2, то @Cacheable(false) в определении вашей сущности должно каждый раз считывать его из БД.

1 голос
/ 01 февраля 2012

Вы имеете в виду, есть ли способ отключить кэш или очистить его перед операцией?

emf.getCache().evictAll();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...