Hibernate 註釋用法
註釋
到現在為止,你已經看到 Hibernate 如何使用 XML 映射文件來完成從 POJO 到數據庫表的數據轉換的,反之亦然。Hibernate 註釋是無需使用 XML 文件來定義映射的最新方法。你可以額外使用註釋或直接代替 XML 映射元數據。
Hibernate 註釋是一種強大的來給對象和關系映射表提供元數據的方法。所有的元數據被添加到 POJO java 文件代碼中,這有利於用戶在開發時更好的理解表的結構和 POJO。
如果你想讓你的應用程序移植到其它 EJB 3 的 ORM 應用程序中,您必須使用註釋來表示映射信息,但是如果想要得到更大的靈活性,那麽你應該使用基於 XML 的映射。
Hibernate 註釋的環境設置
首先你必須確定你使用的是 JDK 5.0,否則你需要升級你的 JDK 至 JDK 5.0,來使你的主機能夠支持註釋。
其次,你需要安裝 Hibernate 3.x 註釋包,可以從 sourceforge 行下載:(下載 Hibernate 註釋) 並且從 Hibernate 註釋發布中拷貝 hibernate-annotations.jar, lib/hibernate-comons-annotations.jar 和 lib/ejb3-persistence.jar 到你的 CLASSPATH。
註釋類示例
正如我上面所提到的,所有的元數據被添加到 POJO java 文件代碼中,這有利於用戶在開發時更好的理解表的結構和 POJO。
下面我們將使用 EMPLOYEE 表來存儲對象:
create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20) default NULL, salary INT default NULL, PRIMARY KEY (id) );
以下是用帶有註釋的 Employee 類來映射使用定義好的 Employee 表的對象:
import javax.persistence.*; @Entity@Table(name = "EMPLOYEE") public class Employee { @Id @GeneratedValue @Column(name = "id") private int id; @Column(name = "first_name") private String firstName; @Column(name = "last_name") private String lastName; @Column(name = "salary") private int salary; public Employee() {} public int getId() { return id; } public void setId( int id ) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName( String first_name ) { this.firstName = first_name; } public String getLastName() { return lastName; } public void setLastName( String last_name ) { this.lastName = last_name; } public int getSalary() { return salary; } public void setSalary( int salary ) { this.salary = salary; } }
Hibernate 檢測到 @Id 註釋字段並且認定它應該在運行時通過字段直接訪問一個對象上的屬性。如果你將 @Id 註釋放在 getId() 方法中,你可以通過默認的 getter 和 setter 方法來訪問屬性。因此,所有其它註釋也放在字段或是 getter 方法中,決定於選擇的策略。下一節將解釋上面的類中使用的註釋。
@Entity 註釋
EJB 3 標準的註釋包含在 javax.persistence 包,所以我們第一步需要導入這個包。第二步我們對 Employee 類使用 @Entity 註釋,標誌著這個類為一個實體 bean,所以它必須含有一個沒有參數的構造函數並且在可保護範圍是可見的。
@Table 註釋
@table 註釋允許您明確表的詳細信息保證實體在數據庫中持續存在。
@table 註釋提供了四個屬性,允許您覆蓋的表的名稱,目錄及其模式,在表中可以對列制定獨特的約束。現在我們使用的是表名為 EMPLOYEE。
@Id 和 @GeneratedValue 註釋
每一個實體 bean 都有一個主鍵,你在類中可以用 @Id 來進行註釋。主鍵可以是一個字段或者是多個字段的組合,這取決於你的表的結構。
默認情況下,@Id 註釋將自動確定最合適的主鍵生成策略,但是你可以通過使用 @GeneratedValue 註釋來覆蓋掉它。strategy 和 generator 這兩個參數我不打算在這裏討論,所以我們只使用默認鍵生成策略。讓 Hibernate 確定使用哪些生成器類型來使代碼移植於不同的數據庫之間。
@Column Annotation
@Column 註釋用於指定某一列與某一個字段或是屬性映射的細節信息。您可以使用下列註釋的最常用的屬性:
- name 屬性允許顯式地指定列的名稱。
- length 屬性為用於映射一個值,特別為一個字符串值的列的大小。
- nullable 屬性允許當生成模式時,一個列可以被標記為非空。
- unique 屬性允許列中只能含有唯一的內容
Hibernate 註釋用法