生成 ConstraintViolationException 的 @Transient 属性

@Transient attribute that generate a ConstraintViolationException

这是我的Class

@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 是临时的,不会存在于等效的 table。

我有一个 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 得到一个空值,因此我得到了这个异常。

对于我的情况,什么是好的解决方案。 我应该重置 passwordConfirmation 值吗?

passwordConfirmation 被标记为 @NotEmpty,所以你正在做一个获取,但没有从数据库中检索任何值,然后保存未通过 @NotEmpty 约束的记录你'已经成立。删除约束或将其设置为一个值。