我有以下代码:
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?
serialNo
13
@Column
length
javax.persistence.Column的length属性用于定义String字段的列长(其他类型将忽略该属性), 仅 在持久性框架将从CREATE TABLE实体生成数据库架构(几个)时使用,例如此选项(对于Hibernate on hibernate.cfg.xml):
javax.persistence.Column
String
CREATE TABLE
hibernate.cfg.xml
<property name="hbm2ddl.auto">create</property>
在您的示例中,该列serialNo将创建为VARCHAR(12)。
VARCHAR(12)
出于所有其他目的(插入或检索数据),它将被 忽略 。
另外,如果您要在类中 “记录” 数据库的 元数据信息 ,这将很有用。这样一来, 自己 可以尝试插入并避免任何之前验证待保存的值 “值太长” 或 “数据截断” 般的例外。