簡介Java的Hibernate框架中的Session和持久化類
Session
Session對(duì)象用于獲取與數(shù)據(jù)庫的物理連接。 Session對(duì)象是重量輕,設(shè)計(jì)了一個(gè)互動(dòng)是需要與數(shù)據(jù)庫每次被實(shí)例化。持久化對(duì)象被保存,并通過一個(gè)Session對(duì)象中檢索。
會(huì)話中的對(duì)象不應(yīng)該保持開放很長一段時(shí)間,因?yàn)樗麄兺ǔ2槐痪€程安全的,他們應(yīng)該被創(chuàng)建并根據(jù)需要摧毀他們。這次會(huì)議的主要功能是提供創(chuàng)建,讀取和刪除操作映射的實(shí)體類的實(shí)例。實(shí)例中可能存在以下三種狀態(tài)之一在給定時(shí)間點(diǎn):
短暫性: 持久化類的未與會(huì)話相關(guān)聯(lián),并在數(shù)據(jù)庫中沒有代表性,沒有標(biāo)識(shí)值的新實(shí)例被Hibernate認(rèn)為是暫時(shí)的。
持久性: 可以做一個(gè)瞬態(tài)的實(shí)例持久化通過將它與一個(gè)會(huì)話相關(guān)聯(lián)。持久性實(shí)例都有一個(gè)表示在數(shù)據(jù)庫中,一個(gè)標(biāo)識(shí)符值,與會(huì)話相關(guān)聯(lián)。
獨(dú)立性: 一旦我們關(guān)閉Hibernate的Session,持久化實(shí)例將成為一個(gè)分離的實(shí)例。
一個(gè)Session實(shí)例是可序列化的,如果它的持久化類是可序列化的。一個(gè)典型的事務(wù)應(yīng)該使用下面的語句:
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拋出異常,事務(wù)必須回滾,會(huì)話必須被丟棄。
持久化類
Hibernate的整個(gè)概念是采取從Java類屬性的值,并將持久到數(shù)據(jù)庫表。一個(gè)映射文件Hibernate的幫助確定如何從拉動(dòng)類的值,并將它們映射與表和相關(guān)的域。
其對(duì)象或?qū)嵗龑⒋鎯?chǔ)在數(shù)據(jù)庫表中的Java類在Hibernate中稱為持久化類。 Hibernate的效果最好,如果這些類遵循一些簡單的規(guī)則,也稱為普通Java對(duì)象(POJO)編程模型。有下列持久化類的主要規(guī)則,但是,這些規(guī)則并不是必需的。
將所有的持久化Java類需要一個(gè)默認(rèn)的構(gòu)造函數(shù)。
所有類應(yīng)該包含為了讓容易識(shí)別對(duì)象內(nèi)Hibernate和數(shù)據(jù)庫的ID。此屬性映射到數(shù)據(jù)庫表的主鍵列。
所有屬性將被持久化應(yīng)該聲明為private,并已在JavaBean風(fēng)格的定義的getXXX和setXXX方法。
Hibernate的關(guān)鍵功能,代理,取決于持久化類或者是非final的,或者說聲明的所有公共方法的接口的實(shí)現(xiàn)。
所有的類不擴(kuò)展或?qū)崿F(xiàn)的EJB框架需要進(jìn)行一些專門的類和接口。
POJO名稱用于強(qiáng)調(diào)一個(gè)給定的對(duì)象是一個(gè)普通的Java對(duì)象,而不是一個(gè)特殊的對(duì)象,好更不是Enterprise JavaBean。
一個(gè)簡單的POJO例子:
基于上面提到的一些規(guī)則,我們可以如下定義一個(gè)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的Hibernate框架中的持久化類和映射文件
- Java?Hibernate中一對(duì)多和多對(duì)多關(guān)系的映射方式
- Java Hibernate使用方法及整合查詢
- Java?hibernate延遲加載get和load的區(qū)別
- Java Hibernate使用SessionFactory創(chuàng)建Session案例詳解
- Hibernate傳入Java對(duì)象創(chuàng)建動(dòng)態(tài)表并錄入數(shù)據(jù)
- Java web Hibernate如何與數(shù)據(jù)庫鏈接
- 詳解Java中Hibernate的基本原理
- Java Hibernate中的持久化類和實(shí)體類關(guān)系
相關(guān)文章
Java實(shí)戰(zhàn)項(xiàng)目之校園跑腿管理系統(tǒng)的實(shí)現(xiàn)
只有理論是不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+vue+maven+elementui+mysql實(shí)現(xiàn)一個(gè)校園跑腿管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2022-01-01Spring @Cacheable redis異常不影響正常業(yè)務(wù)方案
這篇文章主要介紹了Spring @Cacheable redis異常不影響正常業(yè)務(wù)方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Eclipse Web項(xiàng)目打成war包的方法圖解
當(dāng)Tomcat啟動(dòng)后該壓縮文件自動(dòng)解壓縮,war包方便了web工程的發(fā)布,那么Eclipse中如何將Web項(xiàng)目打成war包呢?下面小編通過圖文并茂的方式給大家講解下Eclipse Web項(xiàng)目打成war包的方法,一起看看吧2016-08-08RestTemplate實(shí)現(xiàn)多種底層HTTP客戶端類庫的切換用法
這篇文章主要為大家詳細(xì)的講解了RestTemplate實(shí)現(xiàn)多種底層HTTP客戶端類庫的切換示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步2022-03-03Java狀態(tài)機(jī)的一種優(yōu)雅寫法分享
狀態(tài)機(jī)是一種數(shù)學(xué)模型,對(duì)于我們業(yè)務(wù)實(shí)現(xiàn)有很大的幫助。我們可以用非常多的方法實(shí)現(xiàn)狀態(tài)機(jī),這篇文章就來介紹一個(gè)狀態(tài)機(jī)優(yōu)雅的實(shí)現(xiàn)方法,希望對(duì)大家有所幫助2023-04-04SpringBoot應(yīng)用War包形式部署到外部Tomcat的方法
這篇文章主要介紹了SpringBoot應(yīng)用War包形式部署到外部Tomcat的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08怎樣使用PowerMockito 測(cè)試靜態(tài)方法
這篇文章主要介紹了使用PowerMockito 測(cè)試靜態(tài)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Apache?Log4j2?報(bào)核彈級(jí)漏洞快速修復(fù)方法
Apache?Log4j2?是一個(gè)基于Java的日志記錄工具,是?Log4j?的升級(jí),是目前最優(yōu)秀的?Java日志框架之一,這篇文章主要介紹了突發(fā)Apache?Log4j2?報(bào)核彈級(jí)漏洞快速修復(fù)方法,需要的朋友可以參考下2021-12-12