Java JPA Hibernate在Getter上使用@NotNull注释,尽管使用了@Access(value=AccessType.FIELD)
我有一个使用Java JPA Hibernate在Getter上使用@NotNull注释,尽管使用了@Access(value=AccessType.FIELD),java,hibernate,jpa,ddl,Java,Hibernate,Jpa,Ddl,我有一个使用 @Entity @Table( indexes = {@Index(name="URL_PARAMETER_INDEX", unique = true, columnList = "urlParameter")} ) @Access(value=AccessType.FIELD) public class EntityA extends UniqueIdEntity { // From @MappedSuperClass "UniqueIdEntity"
@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可以为null,但在第一次访问时会生成它并返回新生成的值,因此该字段可能为null,但getter永远不会返回null
但是,JPA将其转换为以下DDL命令:addcolumnURL\u参数varchar(255)NotNull
当我删除getter上的@NotNull注释时,它会将列生成为可为null的
我做错了什么?我已经在每个超类上添加了@Access(value=AccessType.FIELD)
,以确保JPA/Hibernate使用正确的访问类型
如何确保该列可以为null,同时在我的Getter上仍然有@NotNull注释?设置
@Column(…,nullable=false)
我编辑了我的问题,以使我想实现的目标更加清晰。我希望数据库列可以为null,同时Getter上仍然有@NotNull
注释。我不知道为什么Hibernate会这样做@NotNull
是bean验证,而不是JPA。在我看来,正确的解决方案是将类分为业务类和持久性类。让持久性类返回一个null
值,在业务类中执行Getter魔术。我进一步建议不要让Hibernate生成模式,而是使用类似的工具,这对于模式更新也很方便。