Пользовательское ограничение валидатора гибернации не работает

#hibernate #constraints #hibernate-validator

#зимовать #ограничения #спящий режим-валидатор

Вопрос:

Я пытаюсь создать пользовательское противопоказание с помощью валидатора Hibernate. Если я использую стандартный, такой как @Size, он работает хорошо, и я получил сообщение об ошибке. Однако мой собственный не работает, и я не могу понять, почему.

Это мой код:

 import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload;  @Target({ ElementType.FIELD, ElementType.PARAMETER }) @Retention(value = RetentionPolicy.RUNTIME) @Documented @Constraint(validatedBy = TestValidateur.class)    public @interface ObjectValid {    String message() default "test";    Classlt;?gt;[] groups() default {};  Classlt;? extends Payloadgt;[] payload() default {};   }  

И:

 import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext;    public class TestValidateur implements ConstraintValidatorlt;ObjectValid , Stringgt; {   public void initialize(ObjectValid constraintAnnotation) {    }   public boolean isValid(String NoObject, ConstraintValidatorContext ctx) {   return false ;   }  }   
 @Column(name="NoObject") @ObjectValid @Size(min = 4, max = 14) public String NoObject;   

И проверить правильность:

 import java.io.FileNotFoundException; import java.util.Set;  import javax.persistence.EntityManager;  import org.hibernate.mapping.Component; import org.hibernate.validator.HibernateValidator;   import jakarta.validation.ConstraintViolation; import jakarta.validation.Validation; import jakarta.validation.Validator; import jakarta.validation.ValidatorFactory;    public class NoTest {  private static Validator validator;   public static void main(String[] args) throws FileNotFoundException, NoSuchMethodException, SecurityException {    Validator validator = Validation.buildDefaultValidatorFactory().getValidator();  Object objectVerif = new Object("ss");  Setlt;ConstraintViolationlt;Objectgt;gt; validationErrors = validator.validate(objectVerif);  if(!validationErrors.isEmpty()){  for(ConstraintViolationlt;Objectgt; error : validationErrors){  System.out.println(error);   }   }   } }   

If I run the app, I only receive the error message for the @Size

 ConstraintViolationImpl{interpolatedMessage='la taille doit être comprise entre 4 et 14', propertyPath=NoObject, rootBeanClass=class tp03.Object, messageTemplate='{jakarta.validation.constraints.Size.message}'}   

Если у кого-нибудь есть представление о том, чего мне не хватает, я был бы очень признателен

Спасибо

Проверенный объект:

 import java.util.ArrayList; import java.util.Collection;  import javax.persistence.*;  import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction;  import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Null; import jakarta.validation.constraints.Size;  @Entity @Table(name="object",indexes = { @Index(name="primary",columnList = "idObject")})  public class Object {      @Id @GeneratedValue @Column(name="idObject")  private int idObject;  public int getidObject() {  {return idObject;} }  public void SetidObject(int idObject) {    this.idObject=idObject; }   @Column(name="NoObject") @ObjectValid @Size(min = 4, max = 14) public String NoObject;   public String getNoObject() {  {return NoObject;} }  public void SetNoObject(String NoObject) {    this.NoObject=NoObject; }  public Object(String NoObject) {this.NoObject=NoObject; }   }  

Комментарии:

1. Привет, просто для полноты картины, не могли бы вы поделиться большей частью вашего проверенного объекта, чтобы можно было попытаться воспроизвести вашу проблему?

2. Спасибо за комментарий, я добавил больше информации

Ответ №1:

Проблема здесь в том, что javax.validation.Constraint он использовался для определения пользовательского ограничения, но jakarta.validation.Validator используется для проведения проверки, которая затем проверяет только jakarta.validation.Constraint s.

При изменении импорта с javax на jakarta в интерфейсе ObjectValid ограничений и TestValidateur классе оба ограничения проверяются правильно.