11/08/2018, 18:43

Session trong Hibernate

Lớp persistent trong Hibernate Định nghĩa và sử dụng Một Session trong Hibernate được sử dụng để có được một kết nối vật lý với một cơ sở dữ liệu. Đối tượng Session là nhẹ và được thiết kế để được khởi tạo mỗi khi cần tương tác với cơ sở dữ liệu. Các đối tượng persistent được ...

Lớp persistent trong Hibernate

Định nghĩa và sử dụng

Một Session trong Hibernate được sử dụng để có được một kết nối vật lý với một cơ sở dữ liệu. Đối tượng Session là nhẹ và được thiết kế để được khởi tạo mỗi khi cần tương tác với cơ sở dữ liệu. Các đối tượng persistent được lưu và truy xuất thông qua một đối tượng Session.

Các đối tượng session không nên được mở trong một thời gian dài bởi vì chúng không phải là thread an toàn và nên được tạo ra và đóng khi sau khi sử dụng. Chức năng chính của session là cung cấp các thao tác create, update, read và delete cho các thể hiện các lớp thực thể được ánh xạ. Các thể hiện có thể tồn tại ở một trong ba trạng thái sau đây tại một thời điểm nhất định:

  • transient: Một thể hiện mới của một lớp persistent không liên quan đến một Session, không có đại diện trong cơ sở dữ liệu và không có giá trị định danh được coi là transient (tạm thời) bởi Hibernate.
  • persistent: Bạn có thể tạo một thể hiển transient persistent bằng cách liên kết nó với một session. Một thể hiện persistent có một dại diện trong cơ sở dữ liệu, một giá trị định danh và được liên kết với một Session.
  • detached: Khi chúng ta đóng session trong Hibernate, thể hiện persistent sẽ trở thành một thể hiện detached.

Một thể hiện Session là serializable nếu các lớp persistent của nó là serializable. Một transaction thông thường nên sử dụng cấu trúc sau đây:

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();
}

Nếu session ném một ngoại lệ, transaction phải được rollback và session phải là detached.

Các phương thức của interface Session

Có nhiều phương thức được cung cấp bởi giao tiếp Session nhưng bảng dưới đây chỉ liệt kê vài phương thức quan trọng.

No. Các phương thức của Session và mô tả
1 Transaction beginTransaction()

Bắt đầu một đơn vị công việc và trả về đối tượng Transaction liên quan.

2 void cancelQuery()

Hủy việc thực hiện truy vấn hiện tại.

3 void clear()

clear session.

4 Connection close()

Đóng session.

5 Criteria createCriteria(Class persistentClass)

Tạo một thể hiện Criteria, đối với lớp entity đã cho hoặc một superclass của một lớp entity.

6 Criteria createCriteria(String entityName)

Tạo một thể hiện Criteria, đối với entity name đã cho.

7 Serializable getIdentifier(Object object)

Trả lại giá trị số nhận dạng của thực thể cho trước khi kết hợp với session này.

8 Query createFilter(Object collection, String queryString)

Tạo một thể hiện Query mới cho collection và chuỗi lọc nhất định.

9 Query createQuery(String queryString)

Tạo một thể hiện Query mới cho chuỗi truy vấn HQL đã cho.

10 SQLQuery createSQLQuery(String queryString)

Tạo một thể hiện SqlQuery mới cho chuỗi truy vấn SQL đã cho.

11 void delete(Object object)

Xóa persistent instance từ datastore.

12 void delete(String entityName, Object object)

Xóa persistent instance từ datastore.

13 Session get(String entityName, Serializable id)

Trả về persistent instance của thực thể được đặt tên với một số nhận dạng nhất định, hoặc null nếu không có persistent instance.

14 SessionFactory getSessionFactory()

Get session factory cái mà tạo ra session này.

15 void refresh(Object object)

Đọc lại trạng thái của thể hiện đã cho từ cơ sở dữ liệu cơ bản.

16 Transaction getTransaction()

Get thể hiện của Transaction liên quan đến session này.

17 boolean isConnected()

Kiểm tra xem session này có đang kết nối không.

18 boolean isDirty()

Session này có chứa bất kỳ thay đổi nào phải được đồng bộ với cơ sở dữ liệu không?

19 boolean isOpen()

Kiểm tra xem session vẫn đang được open không.

20 Serializable save(Object object)

Lưu transient instance.

21 void saveOrUpdate(Object object)

Thực hiện save(Object) hoặc update(Object).

22 void update(Object object)

Update persistent instance với bộ nhận dạng của detached instance đã cho.

23 void update(String entityName, Object object)

Update persistent instance với bộ nhận dạng của detached instance đã cho.

Bài tiếp theo: Ví dụ về Hibernate
Lớp persistent trong Hibernate
0