【问题标题】:Why isn't the database being updated when I refresh the entity manager?为什么刷新实体管理器时数据库没有更新?
【发布时间】:2012-02-05 10:06:30
【问题描述】:

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

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 异常。

非常感谢您的帮助

【问题讨论】:

  • 它适用于 thomas 建议的合并...非常感谢

标签: java database ejb entitymanager


【解决方案1】:

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

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

尝试改用mergepersist

【讨论】:

  • 非常感谢...合并确实有效...但是持久化不会起作用,因为它试图将信息放回数据库,并且由于主键已经存在...一个 EJB 异常会生成
猜你喜欢
  • 2020-11-07
  • 2012-03-14
  • 2016-09-14
  • 2020-09-20
  • 2019-03-09
  • 1970-01-01
  • 2015-10-30
  • 2015-06-14
  • 1970-01-01
相关资源
最近更新 更多