为hibernate中的唯一约束添加自定义消息

为hibernate中的唯一约束添加自定义消息,hibernate,spring-mvc,Hibernate,Spring Mvc,我有message.properties文件,它工作正常 @Entity @Table(name="users",uniqueConstraints = {@UniqueConstraint(columnNames = {"email"})}) public class User implements Serializable { @Column(unique = true,name = "email") @NotNull(message = "{NotNull.email}")

我有message.properties文件,它工作正常

@Entity @Table(name="users",uniqueConstraints = {@UniqueConstraint(columnNames = {"email"})})
public class User implements Serializable {
    @Column(unique = true,name = "email")
    @NotNull(message = "{NotNull.email}")
    @Email(message = "{Pattern.email}")
    @Size(min=10, max=50)
    private String email;

    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; } 
}
我可以在message.properties文件中添加另一个字段吗

 NotNull.email = Email is required

 Pattern.email = Enter a valid email address
并将此独特的.email发送给

 Unique.email = Email already exits 
我知道,我们不能将message=“{Unique.email}”保留在上述行中

但是,我们如何才能将“Unique.email”提供给上面的列以获取自定义错误消息呢

?

提前感谢

模型User.java中的用户定义注释“@Unique”

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

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

Unique.email = Email id already exists
UserServiceImpl.java

public interface UserService {
    public boolean existsByEmail(String email,Class clazz);
}
UserRepository.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);
    } 

}

在用户存储库文件中

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;
  }
}

我解决了类似的问题,在春季开机,我希望它将帮助美国

@Autowired
private UserRepository userRepository;

if(userRepository.existsByEmail(pass_email_HERE)) {
        throw new YourCustomExceptionException("CUSTOM_ERROR_MESSAGE");
    }
@ControllerAdvice
公共类ControllerExceptionHandler扩展了ResponseEntityExceptionHandler{
@ExceptionHandler(值={DataIntegrityViolationException.class})
受保护的响应handleConflict(DataIntegrityViolationException ex,WebRequest){
JSONObject结果=新建JSONObject();
result.appendField(“result”,false);
字符串errorMessage=“”;
org.hibernate.exception.ConstraintViolationException exDetail=
(org.hibernate.exception.ConstraintViolationException)ex.getCause();
errorMessage=fieldCnvrt(exDetail.getConstraintName())+“birden fazla aynıdeğer içeremez!”;
结果。追加字段(“消息”,errorMessage);
返回响应状态(HttpStatus.不可接受)。正文(结果);
}
专用字符串字段CNVRT(字符串字段){
开关(现场){
案例“用户名”:
field=“KullanıcıAdı”;
打破
案例“电子邮件”:
field=“电子邮件”;
打破
案例“短名称”:
field=“KısaltımıAd”;
打破
案例“名称”:
field=“Ad”;
打破
}
返回字段;
}

}

对于此解决方案,必须在数据库中使用“查找”,这是错误的@saeedeh您如何避免“查找”用于此解决方案?@Semantic我如何才能将此注释用于更多表?是否需要为所有验证器创建单独的实现?@Semantic此实现也会在更新记录时引发验证错误。如何解决这个问题?
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;
  }
}
public interface UserRepository extends JpaRepository<User, Long> {
      Boolean existsByEmail(String email);
}
@Autowired
private UserRepository userRepository;

if(userRepository.existsByEmail(pass_email_HERE)) {
        throw new YourCustomExceptionException("CUSTOM_ERROR_MESSAGE");
    }
@ControllerAdvice
public class ControllerExceptionHandler extends ResponseEntityExceptionHandler {

@ExceptionHandler(value = {DataIntegrityViolationException.class})
protected ResponseEntity<JSONObject> handleConflict(DataIntegrityViolationException ex, WebRequest request) {
    JSONObject result = new JSONObject();
    result.appendField("result", false);
    String errorMessage = "";

    org.hibernate.exception.ConstraintViolationException exDetail =
            (org.hibernate.exception.ConstraintViolationException) ex.getCause();

    errorMessage = fieldCnvrt(exDetail.getConstraintName()) + " birden fazla aynı değer içeremez!";


    result.appendField("message", errorMessage);
    return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE).body(result);
}

private String fieldCnvrt(String field) {
    switch (field) {
        case "username":
            field = "Kullanıcı Adı";
            break;
        case "email":
            field = "Email";
            break;
        case "short_name":
            field = "Kısaltımış Ad";
            break;
        case "name":
            field = "Ad";
            break;
    }

    return field;
}