Почему база данных не обновляется, когда я обновляю менеджер сущностей? - PullRequest
1 голос
/ 08 января 2012

В настоящее время я занимаюсь разработкой сайта социальной сети и в настоящее время реализую часть, в которой пользователь может изменить свой пароль.Я использую менеджер сущностей, чтобы обновить содержимое базы данных новым паролем.Ниже приведен код для реализации.

final Implementation user = em.find(Implementation.class, username);
            if((user!=null) && user.getPassword().equals(hash(username,oldPassword))){
            user.setPassword(hash(username,newPassword));

            em.refresh(user);
        }else{
            throw new ChangePasswordException();
        }

, однако, когда я пытаюсь снова войти в систему, необходимо использовать более старый пароль, в противном случае, если будет введен новый пароль, он скажет вам: пароли не совпадают,Кто-нибудь знает, может быть, почему это происходит?Я попытался сначала удалить пользователя из базы данных, а затем снова сохранить нового пользователя.Однако было сгенерировано исключение EJB, поскольку имя пользователя не было уникальным, поскольку пользователь не был удален из базы данных.

Большое спасибо за вашу помощь

1 Ответ

3 голосов
/ 08 января 2012

Вы не сохраняете новый пароль. Вы перезаписываете сделанные вами изменения. Поэтому refresh(user) извлечет текущее состояние этого пользователя и запишет его в ваш объект.

document : обновить состояние экземпляра из базы данных, перезаписывая изменения, внесенные в объект, если таковые имеются.

Попробуйте использовать merge или persist вместо

...