【问题标题】:Does the length field on the javax.persistence @Column define max?javax.persistence @Column 上的长度字段是否定义了最大值?
【发布时间】:2013-05-12 01:40:37
【问题描述】:

我有这个代码:

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,而不是截断。那@Columnlength有什么用呢?

【问题讨论】:

    标签: java hibernate jpa annotations entity-model


    【解决方案1】:

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

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

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

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



    此外,如果您想在类中“记录”数据库的元数据信息,它也很有用。这样,您自己可以在尝试插入之前验证要保存的值,并避免任何“值过长”“数据截断”-类似异常。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    相关资源
    最近更新 更多