2.1 註解@Entity、@Table

如果你想將你的類映射到數據庫中的表,那麼為此你需要向它添加多達 3 個註釋。

首先,你需要給類添加一個註解@Entity。這個類前面的註解會告訴Hibernate,這不僅僅是一個類,而是一個特殊的類,它的對象需要存儲在數據庫中。

例子:

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

這足以讓 Hibernate 以特殊方式處理此類的對象。

第二個註解是@Table. 在它的幫助下,您可以設置數據庫中與此類關聯的表的名稱。例子:

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

如果類名和表名相同,則註解@Table可以省略。

此外,如果您的應用程序同時使用來自多個模式的表,那麼您需要指定該表所在的特定模式:

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

是的,一切都像看起來那麼簡單。

2.2 @Column註解

第二件重要的事情是表列到類字段的映射。在最簡單的版本中,Hibernate 將簡單地將實體類的字段映射到所需表的列。

如果你想控制映射的所有細微差別,你可以使用註解@Column。例子:

@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;
}

註釋@Column有各種參數,下面我們將考慮其中最流行的參數:

# 屬性名稱 屬性類型 描述
1個 姓名 細繩 設置類字段的表列名稱
2個 獨特的 布爾值 所有字段值必須唯一
3個 可為空 布爾值 該字段可以為空
4個 長度 整數 最大長度(對於字符串)

讓我們向用戶實體類的字段添加一些約束:

  • 用戶名必須唯一且不超過 100 個字符
  • 級別可以為空
  • createdDate 不能為空

那麼我們的註解就變成了:

@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;
}

您可以創建一個User類型的對象,甚至可以為其分配所有字段,但是,當您嘗試將其保存到數據庫時,Hibernate 將執行檢查,如果違反任何限制,將拋出異常。

2.3 @Id 註解

還有一個更重要的註解是@Id. 它可用於設置表的主鍵。

您只需要為所需的字段指定此註釋 - Hibernate 將自行完成所有操作:

@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;
}

如果你希望 Hibernate在將對象添加到數據庫時獨立生成對象的ID@GeneratedValue ,那麼你需要再添加一個註解 - . 那麼我們的示例將如下所示:

@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;
}

我們在這裡省略了id@Column字段的註解,因為它不攜帶有價值的信息——表中的字段名和列名是相同的,多虧了其餘的註解,Hibernate 已經知道我們在談論一個表柱子。