Morphia:@PrePersist在更新文档时运行

时间:2013-12-07 13:00:56

标签: morphia

我有一个用户实体。当我在集合中保存用户文档时,我正在用@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正在运行,密码值是旧密码值并尝试再次散列旧密码。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您应该在setPassword()中隐藏密码。 @PrePersist将永远运行。