Можно ли наследовать аннотацию @Size hibernate?

#java #hibernate #validation #bean-validation

#java #переход в спящий режим #проверка #проверка компонента

Вопрос:

Я пытаюсь использовать проверку спящего режима для проверки размера списка. в общем, я хочу, чтобы список был пустым, если только он не является объектом типа B . похоже, это не работает:

 public static class A
{
    private List<Integer> inheritedRemoveAnnotation = new ArrayList<Integer>();

    @Size(max=0)
    public List<Integer> getInheritedRemoveAnnotation()
    {
        return inheritedRemoveAnnotation;
    }
}
public static class B extends A
{
    @Override
    @Size(max=Integer.MAX_VALUE)
    public List<Integer> getInheritedRemoveAnnotation()
    {
        return super.getInheritedRemoveAnnotation();
    }
}

private static Validator m_validator = Validation.buildDefaultValidatorFactory().getValidator();
public static void main(String[] args)
{
    B b = new B();
    b.getInheritedRemoveAnnotation().add(1);
    System.out.println(m_validator.validate(b));
}
  

Результат, который я получаю,:
[ConstraintViolationImpl{interpolatedMessage='size must be between 0 and 0', propertyPath=inheritedRemoveAnnotation, rootBeanClass=class oshai.hibernatevalidators.TestInheritence$B, messageTemplate='{javax.validation.constraints.Size.message}'}]

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

1. Я не думаю, что она наследуема, но вы можете проверить источник аннотации, чтобы узнать, есть ли у нее аннотация @Inherited . Я был бы удивлен, если бы это было так.

2. Я переопределяю метод getXXX, разве в этом случае родительский метод (и его аннотации) игнорируются?

3. О, я понимаю — я неправильно понял, извините. Я посмотрю еще раз 🙂

Ответ №1:

Все ограничения, которые находятся где-то в иерархии, также проверяются. Согласно документации:

Аннотации ограничений агрегируются, если переопределены методы.