Các phương thức thường dùng của Session trong Hibernate

 

Vòng đời của Hibernate

Trong Hibernate một đối tượng có thể thuộc 3 trạng thái:

Transient: Đối tượng không có quan hệ với Session hiện tại của Hibernate.

Persistent: Đối tượng có quan hệ với Session hiện tại của Hibernate và trạng thái của nó được đồng bộ với cơ sở dữ liêu

Detache: Đối tượng đã từng có trạng thái persistent nhưng hiện tại đã không còn giữ quan hệ với Session.

Ở đây chúng ta nói một đối tượng có quan hệ với Session nghĩa là Session có tham chiếu đến đối tượng đó, hay một cách khác là chịu sự quản lý của Session (dùng tiếng Việt giải nghĩa kỹ thuật khó kinh khủng).

  • save() dùng để lưu một đối tượng với trạng thái transient thành đối tượng persistent, trả về id persist() giống save nhưng không trả về gì cả.
  • saveOrUpdate() nếu là đối tượng mới thì lưu xuống db, nếu không thì update xuống db, cái này sẽ select để kiểm tra trước khi save hoặc update
  • merge() kiểm tra xem có đối tương nào với id như thế tồn tại trong session không, nếu có thì update vào đối tượng đã tồn tại đó, nếu không thì tạo mới một đối tượng và save xuống
  • load() dùng để load một đối tượng từ database lên, nó sẽ có trạng thái persistent, throw exception nếu id không tồn tại
  • get() giống load(), trả về null nếu không tồn tại
  • refresh() refresh một đối tượng đang ở trạng thái persistent
  • delete() load đối tượng lên và xoá nó đi, nếu không muốn load lên thì dùng session.createQuery(”delete from user where …”).executeUpdate()
  • evict() tách một đối tượng ra khỏi session, biến nó từ trạng thái persistent thành transient
  • isDirty() kiểm tra xem session có sync với db không

Chú ý sự khác nhau giữa saveOrUpdate và merge
saveOrUpdate()
-Nếu đối tượng đã được persistent thì không làm gì cả
-Nếu có đối tượng khác được persistent với cùng id thì throw exception
-Nếu đối tượng không có id hoặc có id mới thì gọi save
-Trường hợp khác thì update (có id đã có trong db nhưng chưa được persistent)
merge()
-Nếu có đối tượng trong session với cùng id thì cập nhật giá trị từ thằng ngoài vào. Như vậy thằng ngoài vẫn detach.
-Nếu trong session không có đối tượng vào với cùng id như thế thì load lên từ db. Nếu load lên không có thì tạo đối tượng mới. Xong rồi cập nhật dữ liệu từ thằng ngoài vào thằng trong session.
-Đối tượng trả về ở trạng thái detach

Theo bài viết của  Lê Mạnh Cường

About Langthang

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment
    Facebook Comment

0 comments :

Post a Comment