javax.persistence @Column上的length字段是否定义了max?

Car*_*eon 6 java annotations hibernate jpa entity-model

我有这个代码:

public class Item { 
    @Column(name = "serialNo", length = 12)
    public String getSerialNo() {
        return this.serialNo;
    }

    public void setSerialNo(String serialNo) {
        this.serialNo = serialNo;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,数据库模式将列定义为长度为13.当通过以下方式检索项时:

List<Item> items = getEntityManager().createNamedQuery(SQL).getResultList();
Run Code Online (Sandbox Code Playgroud)

具有数据serialNo等于字符13(因为分贝表模式允许13)仍然被显示为13,不会被截断.@Column length当时有什么用?

acd*_*ior 10

所述javax.persistence.Columnlength属性被用来定义的列的长度String字段(它被用于其他类型的被忽略),并使用时持久性框架将生成的数据库模式(几个CREATE TABLE从实体,如该选项或多个)(对于休眠上hibernate.cfg.xml):

<property name="hbm2ddl.auto">create</property>
Run Code Online (Sandbox Code Playgroud)

在您的示例中,该列serialNo将创建为VARCHAR(12).

出于所有其他目的(插入或检索数据),它将被忽略.



此外,如果要在类中"记录"数据库的元数据信息,这将非常有用.这样,您自己可以在尝试插入之前验证要保存的值,并避免任何"值太长""数据截断"的异常.