1. 程式人生 > >在Hibernate中使用事務

在Hibernate中使用事務

    Hibernate對JDBC進行了輕量級的封裝,它本身在設計時不具備事務處理功能。Hibernate將底層的JDBCTransaction或JTATransaction進行了封裝,再在外面套上Transaction和Session的外殼,其實是通過委託底層的JDBC或JTA來實現事務的處理功能的。

1.在Hibernate中使用JDBC事務

    Hibernate在Session控制下,在取得資料庫連線後,就立刻取消自動提交模式,即Hibernate在執行Session的beginTransaction()方法後,就自動呼叫JDBC底層的setAutoCommit(false)方法。下面是一個在Hibernate中使用JDBC事務的例子:

    在hibernate.cfg.xml中配置JDBC事務

<session-factory>

            <property name="hibernate.transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory
</property>

</session-factory>

測試類

public class Test {
	public static void main(String[] args) {
		Session session=null;
		Transaction tx=null;
		try{
			session=HibernateSessionFactory.getSession();
			Book book1=new Book();
			book1.setName("HTML5從入門到精通");
			book1.setAuthor("未來科技");
			book1.setPrice(67.4);
			
			Book book2=new Book();
			book2.setName("CSS3+DIV");
			book2.setAuthor("未來科技");
			book2.setPrice(49.3);
			
			tx=session.beginTransaction();
			session.save(book1);
			session.save(book2);
			tx.commit();
			tx=null;
			session.close();
		}catch(Exception e){
			if(tx!=null)
				tx.rollback();
			e.printStackTrace();
		}
	}

}

執行結果:



相關推薦

hibernate事務管理

1、 (1)Hibernate可以理解為一箇中間件。它負責把java程式的SQL語句接收過來併發送到資料庫,而資料庫返回的資訊由Hibernate接收後直接生成一個物件傳給java. 在Hibernate中有兩個特有的檔案,一個是以.hbm.xml結尾的對映檔案

Hibernate事務隔離問題(臟讀、不可重復讀、幻讀)

center 錯誤 新增 str 數據庫操作 持久性 有一個 tex rep Hibernate中的事務隔離問題(臟讀、不可重復讀、幻讀) 1.事務的特性 事務的四個特性: 1)原子性:事務是進行數據庫操作的最小單位,所以組成事務的各種操作是不可分割的 2)一致性:組成事務

Hibernate事務與併發

事務的相關概念 什麼是事務 事務是邏輯上的一組操作,組成事務的各個執行單元,操作要麼全都成功,要麼全部失敗 轉賬的例子:小王給小李轉錢,扣錢,加錢,兩個操作組成了一個事務 ###事務的特性

hibernatesession增刪改操作及事務提交的問題

一、問題回顧 Session session = MySessionFactory.getSession(); // Transaction tx = null; // try{ // String hql="delete form td_report where ID=1" ; //

Hibernate事務概念及其支援的事務型別

對於一個持久化框架,或者說ORM軟體,事務的概念可能包含如下不同的內涵: 底層資料庫的物理事務持久化上下文字身的邏輯事務基於持久化框架的上層應用事務 對於底層資料庫的物理事務,這依賴於資料庫管理系統本身提供的事務功能。對於Hibernate來說,只是封裝了JDBC連線資料庫

Hibernate使用事務

    Hibernate對JDBC進行了輕量級的封裝,它本身在設計時不具備事務處理功能。Hibernate將底層的JDBCTransaction或JTATransaction進行了封裝,再在外面套上Transaction和Session的外殼,其實是通過委託底層的JDBC或

Hibernate事務處理流程詳解

一、Hibernate操作的基本流程 使用 Hibernate 進行資料持久化操作,通常有如下步驟: 1、編寫持久化類: POJO + 對映檔案 2、獲取 Configuration 物件 3、獲取 SessionFactory 物件 4、獲取 Session,開啟事務 5

事務&Hibernate指定隔離級別

事務 l  事務:一組業務操作,要麼全部成功,要麼全部不成功。 在Hibernate中設定自動提交事務: <!-- hibernate.connection.autocommit: 事務自動提交 (真正開發時,不用) <property name="hi

Hibernate的五大核心類和接口

session 回滾 開啟事務 核心 避免 事務 提交 jdbc 一級緩存 Hibernate中的五大核心類和接口 Configuration(類) : 加載配置文件hibernate.cfg.xml文件中的配置信息,從而得到: 1).hibernate的

Hibernate的條件查詢完畢類

hiberna 產生 content div ber ont size 查詢 criteria Hibernate中的條件查詢有下面三個類完畢: 1、Criteria:代表一次查詢 2、Criterion:代表一個查詢條件 3、Restrictions:產生

(七)Hibernate使用JDBC

alt work 方法 代碼 cep cti 一個 sdm admin 在hibernate中獲取connection數據庫連接有兩種方法:(操作數據庫常用這種方法) 1. session.doReturningWork 返回一個對象,適用於查詢方法 2. ses

(十二)Hibernate的多表操作(1):單向多對一

art 保存 int gen round t對象 情況 映射文件 拋出異常 由“多”方可知“一”方的信息,比如多個員工使用同一棟公寓,員工可以知道公寓的信息,而公寓無法知道員工的信息。 案例一: pojo類 public class Department {

hibernatehql語句list和iterate區別

每次 hibernate 寫入 所有 讀取 條件 iter 查詢 hql 1.使用list()方法獲取查詢結果,每次發出一條語句,獲取全部數據。2.使用iterate()方法獲取查詢結果,先發出一條SQL語句用來查詢滿足條件數據的id,然後依次按照這些id查詢記錄,也就是要

Hibernateget()和load()的區別

factory all htm on() 被調用 容易 transacti rip con Hibernate中根據Id單條查詢獲取對象的方式有兩種,分別是get()和load(),來看一下這兩種方式的區別。 1. get() 使用get()來根據ID進行單條查詢:

atitit.spring hibernate事務機制 spring不能保存對象的解決

pda 程序 oca roman 配置 轉載 post 本地事務 對象 atitit.spring hibernate的事務機制 spring不能保存對象的解決 sessionFactory.openSession() 不能。。log黑頭馬sql語言..

(十四)Hibernate的多表操作(4):單向一對一

odin utf-8 lds () clas string 方式 rdb style 案例一: 註解方式實現一對一 UserBean.java package bean; import java.io.Serializable; import javax.pers

(十六)Hibernate的延遲加載

pan nco exce bsp fetch gin turn list logs 一、什麽是延遲加載 為了節省Hibernate加載對象的性能節銷,在Hibernate中真正需要用到這個對象時,才會發出 SQL語句來抓取這個對象。這一個過程稱為延遲加

hibernateinverse屬性詳解

values 性能 update 關聯 維護 value str true 詳解 術語”inverse”直譯為”反轉”。在Hibernate中,inverse屬性指定了關聯關系中的方向。關聯關系中,inverse=“false”的為主動方,由主動方維護關聯關系。在一對多關聯

hibernate cascade屬性詳解

-m hibernate 發現 執行效率 pda 不一定 () 程序執行效率 刪除 配置關聯時,我們考慮兩點:程序執行效率和實際業務需要,前面的例子中無論是單向的關聯還是雙向的關聯,我們都要分別對實體類使用session.save()才能將數據保存至數據庫。問題:如果

hibernate多表映射關系配置

-- 實體映射 user roles 實體 name 聯系人 冗余 表名 1.one-to-many一對多關系的映射配置(在一的一方實體映射文件中配置) <!-- cascade屬性:級聯操作屬性