Sự khác nhau giữa @Size, @Length và @Column(length = value)

26 tháng 09, 2022 - 1793 lượt xem

Written By: Hoàng Mạnh Cường (Java 10)
Gmail: manhcuong200997@gmail.com
Bài viết gốc: https://www.baeldung.com/jpa-size-length-column-differences

1. Tổng quan

Trong hướng dẫn này, chúng ta sẽ xem annotation @Size của JSR-330, annotation @Length của Hibernate và thuộc tính length của @Column JPA.

Mới nhìn thì trông chúng có vẻ giống nhau, tuy nhiên chúng lại thực hiện những chức năng khác nhau.

2. Nguồn gốc

Nói một cách đơn giản, tất cả annotation này đều sử dụng để truyền kích thước của field.

@Size@Length tương tự như nhau. Chúng ta có thể sử dụng 1 trong 2 annotation để xác định kích thước của field. Annotation đầu tiên (@Size) là annotation tiêu chuẩn của Java, trong khi annotation sau (@Length) dành riêng cho Hibernate.

Tuy nhiên, @Column là một annotation của JPA mà chúng ta sử dụng để kiểm soát các câu lệnh DDL.

Giờ chúng ta hãy đi vào chi tiết từng loại trong số chúng.

3. @Size

Để xác thực, chúng ta sử dụng @Size, một annotation xác thực bean. Chúng ta sẽ sử dụng thuộc tính middleName được chú thích bởi @Size để xác thực giá trị của nó giữa thuộc tính minmax:

public class User {

    // ...

    @Size(min = 3, max = 15)
    private String middleName;

    // ...

}

Điều quan trọng nhất, @Size làm cho bean độc lập với JPA và các nhà cung cấp của nó, chẳng hạn như là Hibernate.

4. @Length

Như đã đề cập trước đó, @Length là phiên bản @Size dành riêng cho Hibernate. Chúng ta sẽ tạo phạm vi độ dài cho lastName bằng @Length:

@Entity
public class User {

    // ...
      
    @Length(min = 3, max = 15)
    private String lastName;

    // ...

}

5. @Column(length=value)

@Column khá khác so với hai annotations trước. Chúng ta sử dụng @Column để biểu thị đặc điểm cụ thể của cột dữ liệu. Thuộc tính length của annotation @Column xác định độ dài giá trị chuỗi của cột:

@Entity
public class User {

    @Column(length = 3)
    private String firstName;

    // ...

}

Kết quả của cột sẽ được tạo ra dưới dạng VARCHAR(3), và nếu cố gắng đưa vào chuỗi dài hơn thì kết quả nhận được sẽ là lỗi SQL.

Lưu ý rằng chúng ta sẽ chỉ sử dụng @Column để chỉ định thuộc tính cột của bảng, vì nó không dùng để xác thực.

Tất nhiên, chúng ta có thể sử dụng @Column cùng với @Size để chỉ định các thuộc tính cột cơ sở dữ liệu cùng với việc xác thực bean:

@Entity
public class User {

    // ... 
    
    @Column(length = 5)
    @Size(min = 3, max = 5)
    private String city;

    // ...

}

6. Kết luận

Như vậy, qua bài viết này, chúng ta đã tìm hiểu về sự khác nhau giữa @Size annotation, @Length annotation, và thuộc tính length của @Column và cách sử dụng chúng trong từng trường hợp cụ thể.

Bài viết của mình tới đây là kết thúc. Hi vọng những thông tin trong bài viết này có thể hỗ trợ tốt cho các bạn trong công việc hiện tại và trong tương lai.

Thanks for watching!

Bình luận

avatar
Trịnh Minh Cường 2022-09-27 04:32:42.098909 +0000 UTC

Đoạn kết tác giả viết rất lịch sự. Thanks

Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  0 Thích
0