一尘不染

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

hibernate

我有以下代码:

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

    public void setSerialNo(String serialNo) {
        this.serialNo = serialNo;
    }
}

但是,数据库架构将列定义为长度为13。通过以下方式检索项目时:

List<Item> items = getEntityManager().createNamedQuery(SQL).getResultList();

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


阅读 416

收藏
2020-06-20

共1个答案

一尘不染

javax.persistence.Columnlength属性用于定义String字段的列长(其他类型将忽略该属性),
在持久性框架将从CREATE TABLE实体生成数据库架构(几个)时使用,例如此选项(对于Hibernate on
hibernate.cfg.xml):

<property name="hbm2ddl.auto">create</property>

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

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

另外,如果您要在类中 “记录” 数据库的 元数据信息 ,这将很有用。这样一来, 自己 可以尝试插入并避免任何之前验证待保存的值
“值太长”“数据截断” 般的例外。

2020-06-20