2013-12-09 2 views
0

Я использую Hibernate + JSF + PrimeFaces. Теперь я хочу обновить пароль администратора, но всегда получаю диалоговое окно с ошибкой. Я не могу понять, что неправильно в моем коде. Надеюсь, кто-нибудь предложит мне.Не удается обновить пароль, используя Hibernate

loginBean (SessionScoped)

public class loginBean { 

    private Users username; 
    private UsersDao userdao; 

    /** Creates a new instance of loginBean */ 
    public loginBean() { 
     userdao = new UsersDao(); 
     username = new Users(); 
    } 

    public Users getUsername() { 
     return username; 
    } 

    public void setUsername(Users username) { 
     this.username = username; 
    } 

    public void updateUser(){ 
     String msg; 
     if(userdao.updateUser(username)){ 
      msg = "Updated Successfully!"; 
     }else{ 
      msg = "Error. Please check again!"; 
     } 
     FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, null); 
     FacesContext.getCurrentInstance().addMessage(msg, message); 
    } 
} 

UserDAO.java

public class UsersDao { 
    public boolean updateUser(Users user){ 
     boolean flag; 
     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
     try{ 
      session.beginTransaction(); 
      session.save(user); 
      session.beginTransaction().commit(); 
      flag = true; 
     }catch(Exception e){ 
      flag = false; 
      session.beginTransaction().rollback(); 
     } 
     return flag; 
    } 
} 

XHTML
<p:growl id="growl" showDetail="true" life="3000" /> 
<h:form id="tab"> 
     <h:outputLabel>Password</h:outputLabel> 
     <h:inputSecret value="#{loginBean.username.password}" /> 
     <p:commandButton id="loginButton" value="Login" update=":growl" ajax="false" action="#{loginBean.updateUser}"/> 
</h:form> 
+0

И что говорит ваш журнал/консоль? –

+0

«Ошибка. Повторите попытку!». Я использую if ... else ... –

+0

Ваш «updateUser» вашего DAO, конечно же, бросает исключение (которое впоследствии улавливается и помечено). Какое это исключение? Здесь полезны трассировки ошибок уровня программиста, а не ошибки, отображаемые конечным пользователям. –

ответ

1

Ты ас выполняя операцию save в Session, вместо update, поэтому у вас есть исключение Нарушение первичного ключа. Вы сообщаете Hibernate добавить нового пользователя с теми же учетными данными, который ограничен базой данных.

Кроме того, и не связанный с конкретной проблемой, вы должны изменить свое имя класса Users на User, так как оно относится к конкретному пользователю.

+0

О нет, я должен использовать для saveOrupdate, спасибо вам большое :) –

+0

Добро пожаловать ;-) –

+0

Имя класса пользователей генерируется Hibernate. Я думаю, что если меняются, я, возможно, ошибаюсь. –

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