@Column(length= 50)和@Size(max= 50)之间有什么区别?
本文内容摘抄自 : thoughts-on-java
@Column(length= 50和@Size(max= 50)之间有什么区别?
题 :
我们的一些实体属性使用@Column(length= 50)
进行注解,其他属性使用@Size(max = 50)
注解,其他属性使用这两个注解进行注解。
两个注解之间有什么区别?我们使用哪一个会有什么不同吗?
或者我们需要它们吗?
解 :
虽然看起来两个注解看起来都是一样的,但是有一些重要的区别:
- 所述
@Column
注解是JPA规范的一部分,而@Size
注解属于BeanValidation
规范。因此,如果要使用@Size
注解,则需要为项目添加其他依赖项。 @Column
批注的length属性指定数据库列的大小,仅在持久性提供程序生成数据库模式时使用。但@Size
注解告诉您的BeanValidation
实现在运行时执行适当的验证。- 如果使用
@Column
批注并让持久性提供程序生成数据库模式,则数据库将拒绝任何长度超过50个字符的值。该@Size
实体得到持续的或更新注解之前得到您的Java应用程序中进行评估。
我们来看一个例子吧。
使用@Column(size = 50) Annotation
如果使用@Column(size = 50)
注解Book实体的title属性,Hibernate将唯一能够生成一个CREATE TABLE语句,将列的大小限制为50个字符。
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
@Column(length=50)
private String title;
...
create table Book (
id int not null,
title varchar(50),
version int4 not null,
primary key (id)
)
如果使用该CREATE TABLE语句创建数据库表,则如果尝试在标题字段中存储超过50个字符,则数据库将返回错误。但是Hibernate不会在您的应用程序中执行任何验证。
使用@Size(max = 50)Annotation
让我们替换使用@Size(max = 50)
注解而不是之前使用的@Column
注解。
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
@Size(max=50)
private String title;
...
}
正如我在前一篇文章中详细解释的那样,JPA和BeanValidation规范集成得非常好。在这种情况下,这提供了两个主要好处:
如果将Hibernate配置为生成数据库表,则将根据@Size
批注定义的最大大小限制数据库列的大小。因此,您将获得与上一示例中相同的CREATE TABLE语句。
在持久化或更新实体之前,Hibernate将自动触发BeanValidation
实现。这为您提供了另一层保护,它不依赖于特定的生成DDL语句的执行。
你应该使用哪一个?@Column(size = 50)或@Size(max = 50)?
正如您在前面的段落中看到的那样,Hibernate为两个注解生成相同的CREATE TABLE语句。但对于@Size
注解,Hibernate会在插入或更新实体之前自动触发验证。
这使得@Size
注解成为一种更安全,更强大的方法来验证实体属性值的大小。
分类:
程序人生 / Java程序员
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义