Java 为什么不是';刷新实体管理器时,数据库是否正在更新?

Java 为什么不是';刷新实体管理器时,数据库是否正在更新?,java,database,ejb,entitymanager,Java,Database,Ejb,Entitymanager,我目前正在开发一个社交网站,并且正在实现一个用户可以更改密码的部分。我正在使用实体管理器用新密码刷新数据库的内容。下面是实现的代码 final Implementation user = em.find(Implementation.class, username); if((user!=null) && user.getPassword().equals(hash(username,oldPassword))){ user.set

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

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异常,因为该用户未从数据库中删除


非常感谢您的帮助

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

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


尝试使用
merge
persist
来代替

非常感谢。。。合并确实有效。。。然而,persist无法工作,因为它试图将信息放回数据库,而且主键已经存在。。。按照thomas的建议,将使用merge生成EJB异常。。。谢谢