8

我有这个代码:

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字符等于(因为 db 表模式允许 13)的数据13仍显示为 13,而不是截断。那有什么用@Column length呢?

4

1 回答 1

13

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

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

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

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



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

于 2013-05-17T01:15:41.160 回答