Add a Custom message for the Unique Constraints in hibernate

前端 未结 3 1097
情歌与酒
情歌与酒 2021-01-06 07:22
@Entity @Table(name=\"users\",uniqueConstraints = {@UniqueConstraint(columnNames = {\"email\"})})
public class User implements Serializable {
    @Column(unique = tr         


        
3条回答
  •  無奈伤痛
    2021-01-06 08:05

    User defined annotation "@Unique" in the model User.java

    @Column(unique = true,name = "email")
    @Unique(message = "{Unique.email}")
    private String email;
    

    message.properties

    Unique.email = Email id already exists
    

    Unique.java

    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.Target;
    import javax.validation.Constraint;
    import javax.validation.Payload;
    import static java.lang.annotation.RetentionPolicy.RUNTIME;
    
    @Documented
    @Target({ElementType.METHOD, ElementType.FIELD})
    @Constraint(validatedBy = UserUniqueValidator.class)
    @Retention(RUNTIME)
    public @interface Unique {
        String message();
        Class[] groups() default { };
        Class[] payload() default { };
    }
    

    UserUniqueValidator.java

    import com.User;
    import com.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import javax.validation.ConstraintValidator;
    import javax.validation.ConstraintValidatorContext;
    
    public class UserUniqueValidator implements ConstraintValidator {
    
        @Autowired
        private UserService userService;
    
        @Override
        public void initialize(Unique unique) {
            unique.message();
        }
    
        @Override
        public boolean isValid(String email, ConstraintValidatorContext context) {
            if (userService != null && userService.existsByEmail(email,User.class)) {
                return false;
            }
            return true;
        }
    }
    

    UserService.java

    public interface UserService {
        public boolean existsByEmail(String email,Class clazz);
    }
    

    UserServiceImpl.java

    import com.UserRepository;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    @Service
    @Transactional
    public class UserServiceImpl extends UserRepository implements UserService  {
    
        @Override
        public boolean existsByEmail(String email, Class clazz) {
            return super.existsByEmail(email,clazz);
        } 
    
    }
    

    UserRepository.java

    public class UserRepository {
      public boolean existsByEmail(String email, Class className) {
          Criteria criteria = getSession().createCriteria(className,"userEmail");
          criteria.add(Restrictions.eq("email",email));
          if(criteria.list().size() == 0){
                return false;
          }
          return true;
      }
    }
    

提交回复
热议问题