JPA Hibernate использует аннотацию @NotNull на Getter, несмотря на использование @Access (value = AccessType.FIELD) - PullRequest
0 голосов
/ 18 января 2020

У меня есть объект, который использует

@Entity
@Table(
        indexes = {@Index(name="URL_PARAMETER_INDEX", unique = true, columnList = "urlParameter")}
)
@Access(value=AccessType.FIELD)
public class EntityA extends UniqueIdEntity {

    // From @MappedSuperClass "UniqueIdEntity"
    @Id
    @GeneratedValue(generator = "uuid2")
    @Column(unique = true, updatable = false, columnDefinition = "uuid")
    protected UUID id;

    @Column(name = "urlParameter", unique = true, nullable = true)
    private String urlParameter;

    ...

    @javax.validation.constraints.NotNull
    public String getUrlParameter() {
        if(this.urlParameter == null) {
            this.urlParameter = this.calculateUrlParameter();
        }
        return urlParameter;
    }

}

Хотя поле urlParameter может быть пустым, при первом доступе оно генерируется и возвращается новое сгенерированное значение, поэтому поле может быть нулевым, но получатель никогда не будет возвращать ноль.

Однако JPA преобразует это в следующую команду DDL: add column url_parameter varchar(255) not null, и когда я удаляю аннотацию @NotNull в получателе, она генерирует столбец как обнуляемый.

Что я делаю не так? Я уже добавил @Access(value=AccessType.FIELD) в каждый суперкласс, чтобы убедиться, что JPA / Hibernate используют правильный тип доступа.

Как я могу гарантировать, что столбец обнуляем, но при этом все еще имеет аннотацию @NotNull на моем добытчике?

...