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