[java] Hibernate Validator를 사용하여 유니크한 값 유효성 검사를 수행하는 방법은 무엇인가요?
  1. @Unique 어노테이션 만들기: 유효성 검사를 수행할 필드에 @Unique 어노테이션을 사용하여 해당 필드가 유니크한 값을 가져야 함을 명시합니다. 어노테이션은 다음과 같이 생성할 수 있습니다.
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = UniqueValidator.class)
public @interface Unique {
    String message() default "{unique.message}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
  1. 유효성 검사 로직 작성: UniqueValidator 클래스를 생성하여 실제 유효성 검사 로직을 작성합니다. 이 클래스는 ConstraintValidator 인터페이스를 구현해야 합니다. 다음은 예시 코드입니다.
public class UniqueValidator implements ConstraintValidator<Unique, Object> {

    @Autowired
    private YourRepository yourRepository;

    private String fieldName;

    @Override
    public void initialize(Unique constraintAnnotation) {
        fieldName = constraintAnnotation.fieldName();
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        if (value == null) {
            return true;
        }
        // 유효성 검사 로직을 작성합니다.
        return !yourRepository.existsByFieldName(fieldName, value);
    }
}
  1. 유효성 검사 적용: 유니크한 값으로 검사하고 싶은 필드에 @Unique 어노테이션을 적용합니다.
public class YourEntity {

    @Unique(fieldName = "name")
    private String name;

    // rest of your entity fields and methods
}

이제 Hibernate Validator가 @Unique 어노테이션이 붙은 필드에 대해 유효성 검사를 수행하게 됩니다.