Валидация бина JPA использует поле или доступ к свойству? - PullRequest
1 голос
/ 28 февраля 2020

JPA для проверки бина использовать поле или доступ к свойству? Он должен использовать один и тот же тип доступа как для JPA, так и для проверки. Как сообщить провайдеру валидации, какой из них следует использовать?

public class Foo {

    @NotNull
    private String name;

    @Size(20)
    public String getName() {

    }

}

1 Ответ

1 голос
/ 29 февраля 2020

Ограничения Bean Validation могут быть как для поля, так и для свойства get. Однако spe c рекомендует использовать только одну стратегию доступа, а при использовании JPA использовать ту же стратегию доступа, что и для персистентности.

Вот соответствующая часть спецификации Bean Validation spe c (см. Раздел 5.1. 2):

Объявления ограничений можно применять как к полям, так и к свойствам для одного и того же типа объекта. Однако одно и то же ограничение не должно дублироваться между полем и связанным с ним свойством (проверка ограничения будет применяться дважды). Рекомендуется, чтобы объекты, содержащие объявления ограничений, придерживались единой стратегии доступа к состоянию (аннотированные поля или свойства).

ПРИМЕЧАНИЕ Java Постоянство и проверка bean-компонентов Для максимальной переносимости постоянные свойства, содержащие Ограничения проверки bean-компонентов, должны использовать ту же стратегию доступа, что и Java Persistence . Другими словами, разместите ваши аннотации ограничений Bean Validation на том же элементе (поле или получателе), что и ваши Java Постоянные аннотации.

Когда поле аннотируется объявлением ограничения, стратегия доступа к полю используется для доступа к состоянию, подтвержденному таким ограничением.

Когда свойство аннотируется объявлением ограничения, стратегия доступа к свойству используется для доступа к состоянию, проверенному таким ограничением.

...