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 已經知道我們在談論一個表柱子。
GO TO FULL VERSION