2.1 Chú thích @Entity, @Table

Nếu bạn muốn ánh xạ lớp của mình tới một bảng trong cơ sở dữ liệu, thì để làm được điều này, bạn cần thêm tối đa 3 chú thích vào đó.

Trước tiên, bạn cần thêm chú thích vào lớp @Entity. Chú thích này phía trước lớp sẽ cho Hibernate biết rằng đây không chỉ là một lớp, mà là một lớp đặc biệt có các đối tượng cần được lưu trữ trong cơ sở dữ liệu.

Ví dụ:

@Entity
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Điều này là đủ để Hibernate xử lý các đối tượng của lớp này theo một cách đặc biệt.

Chú thích thứ hai là @Table. Với sự trợ giúp của nó, bạn có thể đặt tên của bảng trong cơ sở dữ liệu mà lớp này sẽ được liên kết. Ví dụ:

@Entity
@Table(name="user")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Nếu tên lớp và tên bảng giống nhau thì @Tablecó thể bỏ qua chú thích.

Ngoài ra, nếu ứng dụng của bạn làm việc với các bảng từ nhiều lược đồ cùng một lúc, thì bạn cần chỉ định bảng đó nằm trong lược đồ cụ thể nào:

@Entity
@Table(name="user", schema="test")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Vâng, mọi thứ đều đơn giản như nó có vẻ.

2.2 Chú thích @Column

Điều quan trọng thứ hai cần biết là ánh xạ các cột trong bảng tới các trường lớp. Trong phiên bản đơn giản nhất, Hibernate sẽ chỉ ánh xạ các trường của lớp thực thể của bạn tới các cột của bảng mong muốn.

Nếu bạn muốn kiểm soát tất cả các sắc thái của ánh xạ, bạn có thể sử dụng chú thích @Column. Ví dụ:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Chú thích @Columncó nhiều tham số khác nhau, dưới đây chúng tôi sẽ xem xét các tham số phổ biến nhất:

# tên thuộc tính loại thuộc tính Sự miêu tả
1 tên Sợi dây Đặt tên cột bảng cho trường lớp
2 độc nhất boolean Tất cả các giá trị trường phải là duy nhất
3 vô giá trị boolean Trường có thể là null
4 chiều dài int Độ dài tối đa (đối với chuỗi)

Hãy thêm một số ràng buộc vào các trường của lớp Thực thể người dùng của chúng ta:

  • tên người dùng phải là duy nhất và không dài hơn 100 ký tự
  • mức có thể là null
  • ngày tạo không được rỗng

Sau đó, các chú thích của chúng tôi trở thành:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
    public Integer id;

   @Column(name="name", unique=true, length=100)
   public String name;

   @Column(name="level", nullable=true)
   public Integer level;

   @Column(name="created_date", nullable=false)
   public Date createdDate;
}

Bạn có thể tạo một đối tượng kiểu Người dùng và thậm chí gán tất cả các trường null cho nó, tuy nhiên, khi bạn cố lưu nó vào cơ sở dữ liệu, Hibernate sẽ thực hiện kiểm tra và nếu có bất kỳ hạn chế nào bị vi phạm, một ngoại lệ sẽ được đưa ra.

2.3 Chú thích @Id

Và một chú thích quan trọng nữa là @Id. Nó có thể được sử dụng để đặt khóa chính cho một bảng.

Bạn chỉ cần chỉ định chú thích này cho trường mong muốn - và Hibernate sẽ tự làm mọi thứ:

@Entity
@Table(name="user")
class User {
   @Id
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Nếu bạn muốn Hibernate tạo ID của các đối tượng một cách độc lập khi thêm chúng vào cơ sở dữ liệu, thì bạn cần thêm một chú thích nữa - @GeneratedValue. Sau đó, ví dụ của chúng tôi sẽ như thế này:

@Entity
@Table(name="user")
class User {
   @Id
   @GeneratedValue
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Chúng tôi đã bỏ qua chú thích @Columncho trường id ở đây, vì nó không mang thông tin có giá trị - tên trường và tên cột trong bảng giống nhau và nhờ các chú thích còn lại, Hibernate đã hiểu rằng chúng ta đang nói về một bảng cột.