2013-05-17 55 views
6

我有这样的代码:javax.persistence @Column上的length字段是否定义了max?

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

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

但是,数据库模式定义了列被lenght 13。当该项目被检索经由:

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

具有serialNo字符等于13数据(因为数据库表架构允许13)仍然显示为13,而不是截断。那么什么是@Columnlength然后呢?

回答

9

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

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

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

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



另外,如果你想在你的类数据库的“文件”的元数据信息它是有用的。这样,本身可以在尝试插入并避免任何“值太长”“数据截断”类似的异常之前验证待保存的值。

+0

您可以将链接粘贴到相关文档吗?这个链接没有说明仅用于DDL的长度:http://docs.oracle.com/javaee/5/api/javax/persistence/Column.html#length() –

+0

是的,它并不是太具体。查看规范(http://download.oracle.com/otndocs/jcp/persistence-2_1-fr-eval-spec/index.html - JavaPersistence.pdf),第11.2.2.1节。这是他们在整个文档中提到“长度”的唯一时刻。 – acdcjunior

+0

明确提到与模式生成相关的内容:“在模式生成中使用11.2对象/关系元数据”。感谢回复。 –

相关问题