2012-01-08 2 views
1

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

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 было создано, поскольку имя пользователя не было уникальным, поскольку пользователь не был удален из базы данных.

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

+0

ли судимыми вы em.flush() ?? – kiki

+0

он работает с объединением, поскольку thomas предложил ... спасибо большое – ict1991

ответ

3

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

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

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

+0

спасибо большое ... merge действительно работает ... однако persist не работал бы, поскольку он пытается поместить информацию обратно в базу данных, и поскольку первичный ключ уже существует ... EJB исключение будет сгенерировано – ict1991

+0

^^ справа. поэтому в вашем случае 'merge' - это метод, который вам нужен;) – thomas

 Смежные вопросы

  • Нет связанных вопросов^_^