在 JPA 中设置列的长度到底有什么作用?
@Column(name = "middle_name", nullable = false, length = 32)
public String getMiddleName() {
return this.middleName;
}
我知道您可以使用注释来基于实体对象生成数据库架构 (DDL),但是长度是否会在持久性发生时进行任何类型的检查或截断,或者它仅用于架构创建?
我还意识到 JPA 可以位于各种实现之上,在这种情况下我关注的实现是 Hibernate。
最佳答案
Does length do any sort of check or truncation when persistence happens, or it solely used for schema creation?
The column length. (Applies only if a string-valued column is used.)
And 仅在生成的 DDL 中使用。在您的示例中,结果列将生成为 VARCHAR(32)
并且尝试插入更长的字符串会导致 SQL 错误。
对于验证,您可以添加 @Size(max=32)
constraint来自 Bean 验证 API (JSR 303)。我提供了一个带有可运行测试的样本 here .
同时提供 Size
和 length
似乎是多余的,但根据 Appendix D.根据 Bean Validation 规范,生成 Bean Validation-aware DDL 对于 Persistence Providers 不是强制性的。所以使用 length
作为 DDL,@Size
进行验证。
如果您有兴趣,只需将 Bean Validation 实现放在 JPA 2.0 的类路径上。对于 JPA 1.0,请参阅 previous answer .
关于java - 在 @Column JPA 注释上设置长度属性时有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2875149/