【发布时间】:2019-09-17 20:32:07
【问题描述】:
这是我的课
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Email
@NotEmpty
private String email;
@NotEmpty
private String password;
@Transient
@NotEmpty
private String passwordConfirmation;
//constructors, getters, setters omitted....
}
如您所见,passwordConfirmation 是瞬态的,不会存在于等效表中。
我有一个 UserRepository 可以从数据库中保存和检索用户。
public interface UserRepository extends JpaRepository<MyUser, Long> {}
当我保存用户时
User user1 = new User("zak@gmail.com", "pass", "pass");
userRepository.save(user1);
一切正常,但是当我检索用户进行某些处理时,我得到一个javax.validation.ConstraintViolationException: Validation failed for classes
User user1 = userRepository.findByUsername("zak@gmail.com");
//some procesing
userRepository.save(user1);
当我检索用户时,passwordConfirmation 得到一个空值,因此我得到了这个异常。
什么可能是我的方案的好解决方案。 我应该重置密码确认值吗?
【问题讨论】:
-
“什么是好的解决方案?” 删除
@NotEmpty,因为这是开始违反的约束。我很困惑你甚至问。你从不在乎它是否是空的。如果验证 UI,你关心它是否与password相同,否则你根本不关心。实际上,该字段不应该存在,因为双密码输入是为了防止拼写错误,应该在网络浏览器中检查,而不是在服务器上检查。
标签: java spring-data-jpa bean-validation