刷新实体管理器时为什么不更新数据库?

时间:2012-01-08 15:39:25

标签: java database ejb entitymanager

我目前正在开发一个社交网站,我目前正在实施用户可以更改密码的部分。我正在使用实体管理器使用新密码刷新数据库的内容。以下是实施的代码。

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 个答案:

答案 0 :(得分:3)

您没有保存新密码。您正在覆盖您所做的更改。因此refresh(user)将获取该用户的当前状态,并将其写入您的对象。

  

docu:从数据库中刷新实例的状态,覆盖对实体所做的更改(如果有)。

尝试使用mergepersist代替