У меня есть объект, который использует
@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 на моем добытчике?