Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 服务器启动时的hibernate验证不检查列长度_Java_Hibernate - Fatal编程技术网

Java 服务器启动时的hibernate验证不检查列长度

Java 服务器启动时的hibernate验证不检查列长度,java,hibernate,Java,Hibernate,我拥有以下实体: @Entity @Table(name = "my_entity") public class MyEntity { @Column(columnDefinition = "VARCHAR(2000)") private String myField; public String getMyField() { return myField; } public void setMyField(String myFiel

我拥有以下实体:

@Entity
@Table(name = "my_entity")
public class MyEntity {

    @Column(columnDefinition = "VARCHAR(2000)")
    private String myField;

    public String getMyField() {
        return myField;
    }

    public void setMyField(String myField) {
        this.myField = myField;
    }
}
我将Hibernate配置为对我的模式执行验证:

hibernate.hbm2ddl.auto=validate
在我的模式中,表“my_entity”下有一列“myField” 最大长度为255个字符

我预计服务器启动时,Hibernate的验证会失败 因为实体中定义的字段长度大于 是在我的模式中定义的

是虫子吗?
有没有办法配置Hibernate来实现这一点?

Hibernate文档中说:

当 SessionFactory已创建

根据使用hibernate的设置,SessionFactory不可用 必须在服务器启动时立即创建。例如,当您使用
Configuration().configure().buildSessionFactory()创建SessionFactory“own your own”时


Edit:看起来有点像是Hibernate bug,因为它只检查列类型。

我认为您正在查找
@Column(length=2000)
@Marvin我认为它与@Column(columnDefinition=“VARCHAR(2000)”相同。无论如何,Hibernate也不会对@Column(length=2000)执行验证。我已经验证了在服务器启动时是否创建了会话工厂。例如,如果我想为表中不存在的实体添加一个新字段,则Hibernate验证将失败。所以我知道Hibernate确实执行了验证,问题是为什么它不检查列的长度是否与它映射到的字段的长度匹配?在这种情况下,我很抱歉没有解决方案:-(…顺便说一句。我发现Hibernate JIRA票据存在类似的问题(没有检查“not null”映射定义)自2008年开始开放…可能您看到的问题只是hibernate中的一个bug?这还提到hibernate类org.hibernate.mapping.Table中的“validateColumns”方法只检查列类型!谢谢@AndréR,正如您提到的,hibernate在执行模式验证时似乎没有检查它。