Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA Hibernate在Getter上使用@NotNull注释,尽管使用了@Access(value=AccessType.FIELD)_Java_Hibernate_Jpa_Ddl - Fatal编程技术网

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生成模式,而是使用类似的工具,这对于模式更新也很方便。