簡介Java的Hibernate框架中的Session和持久化類
Session
Session對象用于獲取與數(shù)據(jù)庫的物理連接。 Session對象是重量輕,設計了一個互動是需要與數(shù)據(jù)庫每次被實例化。持久化對象被保存,并通過一個Session對象中檢索。
會話中的對象不應該保持開放很長一段時間,因為他們通常不被線程安全的,他們應該被創(chuàng)建并根據(jù)需要摧毀他們。這次會議的主要功能是提供創(chuàng)建,讀取和刪除操作映射的實體類的實例。實例中可能存在以下三種狀態(tài)之一在給定時間點:
短暫性: 持久化類的未與會話相關聯(lián),并在數(shù)據(jù)庫中沒有代表性,沒有標識值的新實例被Hibernate認為是暫時的。
持久性: 可以做一個瞬態(tài)的實例持久化通過將它與一個會話相關聯(lián)。持久性實例都有一個表示在數(shù)據(jù)庫中,一個標識符值,與會話相關聯(lián)。
獨立性: 一旦我們關閉Hibernate的Session,持久化實例將成為一個分離的實例。
一個Session實例是可序列化的,如果它的持久化類是可序列化的。一個典型的事務應該使用下面的語句:
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類屬性的值,并將持久到數(shù)據(jù)庫表。一個映射文件Hibernate的幫助確定如何從拉動類的值,并將它們映射與表和相關的域。
其對象或?qū)嵗龑⒋鎯υ跀?shù)據(jù)庫表中的Java類在Hibernate中稱為持久化類。 Hibernate的效果最好,如果這些類遵循一些簡單的規(guī)則,也稱為普通Java對象(POJO)編程模型。有下列持久化類的主要規(guī)則,但是,這些規(guī)則并不是必需的。
將所有的持久化Java類需要一個默認的構(gòu)造函數(shù)。
所有類應該包含為了讓容易識別對象內(nèi)Hibernate和數(shù)據(jù)庫的ID。此屬性映射到數(shù)據(jù)庫表的主鍵列。
所有屬性將被持久化應該聲明為private,并已在JavaBean風格的定義的getXXX和setXXX方法。
Hibernate的關鍵功能,代理,取決于持久化類或者是非final的,或者說聲明的所有公共方法的接口的實現(xiàn)。
所有的類不擴展或?qū)崿F(xiàn)的EJB框架需要進行一些專門的類和接口。
POJO名稱用于強調(diào)一個給定的對象是一個普通的Java對象,而不是一個特殊的對象,好更不是Enterprise JavaBean。
一個簡單的POJO例子:
基于上面提到的一些規(guī)則,我們可以如下定義一個POJO類:
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;
}
}
相關文章
Java實戰(zhàn)項目之校園跑腿管理系統(tǒng)的實現(xiàn)
只有理論是不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+vue+maven+elementui+mysql實現(xiàn)一個校園跑腿管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2022-01-01
Spring @Cacheable redis異常不影響正常業(yè)務方案
這篇文章主要介紹了Spring @Cacheable redis異常不影響正常業(yè)務方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02
RestTemplate實現(xiàn)多種底層HTTP客戶端類庫的切換用法
這篇文章主要為大家詳細的講解了RestTemplate實現(xiàn)多種底層HTTP客戶端類庫的切換示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進步2022-03-03
SpringBoot應用War包形式部署到外部Tomcat的方法
這篇文章主要介紹了SpringBoot應用War包形式部署到外部Tomcat的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08

