我有一个用户实体。当我在集合中保存用户文档时,我正在用@PrePersist对密码进行哈希处理,但是当我尝试更新没有密码的文档时,Morphia也会调用@PrePersist。
@PrePersist
void prePersist() {
if (password != null) {
System.out.println(password);
PasswordService service = new DefaultPasswordService();
password = service.encryptPassword(password);
}
}
这是我的更新操作。
@Override
public void updateWithoutPassword(T user) {
Query <T> query = userDAO.createQuery();
query.and(
query.criteria("_id").equal(user.getId())
);
UpdateOperations <T> updateOperations = userDAO.createUpdateOperations();
updateOperations.set("username", user.getUsername());
updateOperations.set("name", user.getName());
updateOperations.set("surname", user.getSurname());
updateOperations.set("department", user.getDepartment());
updateOperations.set("roles", user.getRoles());
userDAO.update(query, updateOperations);
}
当我调用updateWithoutPassword()时,@ PrePersist正在运行,密码值是旧密码值并尝试再次散列旧密码。我做错了什么?
答案 0 :(得分:1)
您应该在setPassword()中隐藏密码。 @PrePersist将永远运行。