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

时间:2013-05-17 00:42:12

标签: java hibernate jpa annotations entity-model

我有这段代码:

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的数据(因为db表架构允许13个)仍然显示为13,而不是截断。那么@Column length有什么用?

1 个答案:

答案 0 :(得分:9)

javax.persistence.Columnlength属性用于定义String字段的列长度(其他类型会被忽略),并且仅使用 当持久性框架将从实体生成数据库模式(几个CREATE TABLE)时,例如此选项(对于hibernate.cfg.xml上的Hibernate):

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

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

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



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