在@Column JPA注释上进行设置时,length属性有什么作用?
在JPA中,设置列的长度到底有什么用?
@Column(name = "middle_name", nullable = false, length = 32)public String getMiddleName() {
return this.middleName;
}
我了解您可以使用注释基于实体对象生成数据库架构(DDL),但是在发生持久性时,length是否进行任何形式的检查或截断,还是仅用于架构创建?
我还意识到JPA可以放在各种实现之上,在这种情况下,我关心的实现是Hibernate。
回答:
持久性发生时,length是否进行任何形式的检查或截断,还是仅用于模式创建?
注释的length
属性Column
用于指定:
列长。(仅在使用字符串值的列时适用。)
并且仅在生成的DDL中使用。在您的示例中,结果列将作为生成,VARCHAR(32)
并且尝试插入更长的字符串将导致SQL错误。
为了进行验证,您可以从Bean验证API(JSR
303)添加一个@Size(max=32)
约束。我在此处提供了具有可运行测试的示例。
同时提供这两者Size
并length
可能看起来是多余的,但是根据Bean
Validation规范的附录D,对于持久性提供程序来说,生成Bean验证感知DDL不是必需的。因此,请使用length
DDL @Size
进行验证。
如果您有兴趣,只需将Bean验证实现放在JPA 2.0的类路径上。对于JPA
1.0,请参考此先前的答案:
您需要编写一个实体侦听器,并在上触发验证@PrePersist
,@PreUpdate
甚至@PreRemove
(有有效的用例)。有关 代码示例,请参见使用JPA 1.0 进行Bean验证 。
以上是 在@Column JPA注释上进行设置时,length属性有什么作用? 的全部内容, 来源链接: utcz.com/qa/434058.html