Hung PD
Hung PD

Reputation: 405

Can't update password using Hibernate

I'm using Hibernate + JSF + PrimeFaces. Now I wanna update password of admin but I always get error dialog. I can't figure out what wrong in my code. Hope anyone suggest me.

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>

Upvotes: 0

Views: 709

Answers (1)

Aritz
Aritz

Reputation: 31649

You're actually performing a save operation into the Session, instead of an update one, that's why you've got a Violation of PRIMARY KEY exception. You're telling Hibernate to add a new user with the same credentials, which is constrained by the Data Base.

In addition, and unrelated to the concrete problem, you should change your Users class name to User, as it refers to a concrete user.

Upvotes: 1

Related Questions