Session
Session對象用于獲取與數據庫的物理連接。 Session對象是重量輕,設計了一個互動是需要與數據庫每次被實例化。持久化對象被保存,并通過一個Session對象中檢索。
會話中的對象不應該保持開放很長一段時間,因為他們通常不被線程安全的,他們應該被創建并根據需要摧毀他們。這次會議的主要功能是提供創建,讀取和刪除操作映射的實體類的實例。實例中可能存在以下三種狀態之一在給定時間點:
短暫性: 持久化類的未與會話相關聯,并在數據庫中沒有代表性,沒有標識值的新實例被Hibernate認為是暫時的。
持久性: 可以做一個瞬態的實例持久化通過將它與一個會話相關聯。持久性實例都有一個表示在數據庫中,一個標識符值,與會話相關聯。
獨立性: 一旦我們關閉Hibernate的Session,持久化實例將成為一個分離的實例。
一個Session實例是可序列化的,如果它的持久化類是可序列化的。一個典型的事務應該使用下面的語句:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
Session session = factory.openSession(); Transaction tx = null ; try { tx = session.beginTransaction(); // do some work ... tx.commit(); } catch (Exception e) { if (tx!= null ) tx.rollback(); e.printStackTrace(); } finally { session.close(); } |
如果Session拋出異常,事務必須回滾,會話必須被丟棄。
持久化類
Hibernate的整個概念是采取從Java類屬性的值,并將持久到數據庫表。一個映射文件Hibernate的幫助確定如何從拉動類的值,并將它們映射與表和相關的域。
其對象或實例將存儲在數據庫表中的Java類在Hibernate中稱為持久化類。 Hibernate的效果最好,如果這些類遵循一些簡單的規則,也稱為普通Java對象(POJO)編程模型。有下列持久化類的主要規則,但是,這些規則并不是必需的。
將所有的持久化Java類需要一個默認的構造函數。
所有類應該包含為了讓容易識別對象內Hibernate和數據庫的ID。此屬性映射到數據庫表的主鍵列。
所有屬性將被持久化應該聲明為private,并已在JavaBean風格的定義的getXXX和setXXX方法。
Hibernate的關鍵功能,代理,取決于持久化類或者是非final的,或者說聲明的所有公共方法的接口的實現。
所有的類不擴展或實現的EJB框架需要進行一些專門的類和接口。
POJO名稱用于強調一個給定的對象是一個普通的Java對象,而不是一個特殊的對象,好更不是Enterprise JavaBean。
一個簡單的POJO例子:
基于上面提到的一些規則,我們可以如下定義一個POJO類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
public class Employee { private int id; private String firstName; private String lastName; private int salary; public Employee() {} public Employee(String fname, String lname, int salary) { this .firstName = fname; this .lastName = lname; this .salary = salary; } 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; } } |