@Column(length= 50)和@Size(max= 50)之间有什么区别?

本文内容摘抄自 : thoughts-on-java

@Column(length= 50和@Size(max= 50)之间有什么区别?

题 :

我们的一些实体属性使用@Column(length= 50)进行注解,其他属性使用@Size(max = 50)注解,其他属性使用这两个注解进行注解。

两个注解之间有什么区别?我们使用哪一个会有什么不同吗?

或者我们需要它们吗?

解 :

虽然看起来两个注解看起来都是一样的,但是有一些重要的区别:

  1. 所述@Column注解是JPA规范的一部分,而@Size注解属于BeanValidation规范。因此,如果要使用@Size注解,则需要为项目添加其他依赖项。
  2. @Column批注的length属性指定数据库列的大小,仅在持久性提供程序生成数据库模式时使用。但@Size注解告诉您的BeanValidation实现在运行时执行适当的验证。
  3. 如果使用@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注解成为一种更安全更强大的方法来验证实体属性值的大小。

posted @   EalenXie  阅读(13971)  评论(0编辑  收藏  举报
编辑推荐:
· .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 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示