java - 在 @Column JPA 注释上设置长度属性时有什么作用?

标签 java hibernate jpa annotations

在 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?

length Column 的属性注解用于指定:

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 .

同时提供 Sizelength 似乎是多余的,但根据 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/

相关文章:

java - 有没有办法在 Allure 中设置步骤的严重性/优先级?

java - 带反冲的字符串 - java

java - 找不到元素 'persistence' JPA 和 hibernate 提供程序的声明

java - 将 ScrollBar 添加到 JTextArea

java - Struts2在jsp中显示pdf文件

java - JPA LockModeType.PESSIMISTIC_WRITE 无法按预期工作。没有 key 的应用程序,在锁定时读取数据库快照

sql - 计算给定时间段内有多少首条目和末尾条目相等

java - 与tomcat上的hibernate和mysql共享c3p0连接池

Hibernate FetchMode.JOIN 在 Embeddable 中被忽略用作 ID

hibernate - java.lang.ClassCastException : org. springframework.orm.hibernate5.SessionHolder 无法转换为 org.springframework.orm.jpa.EntityManagerHolder