1. 程式人生 > >hibernate4.0+版本和3.0+版本的區別總結

hibernate4.0+版本和3.0+版本的區別總結

1.資料庫方言設定
<property name=”dialect”>org.hibernate.dialect.MySQL5Dialect</property>
在3.3版本中連線MySQL資料庫只需要指明MySQLDialect即可。在4.1版本中可以指出MySQL5Dialect
2.buildSessionFactory
4.1版本中buildSessionFactory()已經被buildSessionFactory(ServiceRegistry ServiceRegistry)取代
解決辦法:
      Configuration cfg = new Configuration().configure();
      serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
      sessionFactory = cfg.buildSessionFactory(serviceRegistry);
3.annotation
org.hibernate.cfg.AnnotationConfiguration;這個註解讀取配置的class已經廢棄,現在讀取配置不需要特別註明是註解,
直接用Configuration cfg = new Configuration();就可以讀取註解。
Hibernate4.1版本中推薦使用annotation配置,所以在引進jar包時把requested裡面的包全部引進來就已經包含了annotation必須包了



Hibernate4 環境搭建:
 
匯入必須的Hibernate4  JAR包
${hibernate_home}\hibernate-release-4.0.0.Final\lib\required\*
 
資料庫驅動包(Oracle)
ojdbc14.jar
 
快取(可選)
${hibernate_home}\hibernate-release-4.0.0.Final\lib\optional\ehcache\*
${hibernate_home}\hibernate-distribution-3.6.0.Final\lib\required\slf4j-api-1.6.1.jar
 
C3P0連線池(可選)
${hibernate_home\hibernate-release-4.0.0.Final\lib\optional\c3p0\*


編寫hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE hibernate-configuration PUBLIC  
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
<hibernate-configuration>  
    <session-factory>  
 
        <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>  
        <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>  
        <property name="hibernate.connection.username">scott</property>  
        <property name="hibernate.connection.password">tiger</property>  
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>  
        <property name="hibernate.show_sql">true</property>  
        <property name="hibernate.format_sql">true</property>  
        <property name="hibernate.hbm2ddl.auto">none</property>  
        <property name="hibernate.jdbc.fetch_size">100</property>  
        <property name="hibernate.jdbc.batch_size">30</property>  
        <!-- 配置二級快取 -->  
        <property name="hibernate.cache.use_second_level_cache">true</property>  
        <property name="hibernate.cache.use_query_cache">true</property>  
        <!-- Hibernate4 這裡和Hibernate3不一樣 要特別注意!!!-->  
        <property name="hibernate.cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</property>  
        <!-- Hibernate3 -->  
        <!-- <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> -->  
        <!-- 配置C3P0 -->  
        <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>  
        <property name="hibernate.c3p0.max_size">10</property>  
        <property name="hibernate.c3p0.min_size">1</property>  
        <property name="hibernate.c3p0.max_statements">3</property>  
        <property name="hibernate.c3p0.timeout">30</property>  
        <property name="hibernate.c3p0.acquire_increment">1</property>  
        <property name="hibernate.c3p0.idle_test_periodt">10</property>  
           
    <mapping class="com.many2manay.Student" />
    <mapping class="com.many2manay.teacher" />
    <mapping class="com.one2many.Dept" />
    <mapping class="com.one2many.Emp" />
    <mapping class="com.one2one.Dept" />
    <mapping class="com.one2one.Emp" />
          
    </session-factory>  
</hibernate-configuration>  



hibernate使用版本是:hibernate-release-4.2.5.Final
需要的jar包:hibernate-release-4.2.5.Final\lib\required下所有jar包
ehcache  jar包:hibernate-release-4.2.5.Final\lib\optional\ehcache下所有包
junit:junit-4.10.jar和mysql-connector-java-5.1.15-bin.jar
注:hibernate 4.2.5版本ehcache快取不依賴commons-logging-1.1.1.jar,需要的是slf4j-api-1.6.1.jar


===============================獲取Session=============================================:
Session session = sessionFactory.getCurrentSession();//推薦使用
 
getCurrentSession()與openSession()的區別
1、getCurrentSession () 使用當前的session   openSession()     重新建立一個新的session
* 採用getCurrentSession()建立的session會繫結到當前執行緒中,而採用openSession()建立的session則不會
* 採用getCurrentSession()建立的session在commit或rollback時會自動關閉,
   而採用openSession()建立的session必須手動關閉
2、使用getCurrentSession()需要在hibernate.cfg.xml檔案中加入如下配置:
* 如果使用的是本地事務(jdbc事務)
<property name="hibernate.current_session_context_class">thread</property>
* 如果使用的是全域性事務(jta事務)java分散式事務管理(多資料庫訪問)
 jta由中介軟體提供(jboss WebLogic等,tomcat不支援)
<property name="hibernate.current_session_context_class">jta</property>
 getCurrentSession()就是把事務和session繫結在了一起,所以就算是查詢這些操作也得開啟事務。

 否則報:org.hibernate.HibernateException: get is not valid without active transaction

getCurrentSession()使用方法
例子之一:
 Session session=HibernateSessionFactory.getSessionFactory().getCurrentSession();
 session.beginTransaction();
 StudentVo vo=(StudentVo)session.get(StudentVo.class, 1L);
 session.getTransaction().commit();





例子之二:
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();  
session.save(t);
session.getTransaction().commit();

openSession()使用方法
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.save(t);
tx.commit();
session.close();  

相關推薦

hibernate4.0+版本3.0+版本區別總結

1.資料庫方言設定 <property name=”dialect”>org.hibernate.dialect.MySQL5Dialect</property> 在3.3版本中連線MySQL資料庫只需要指明MySQLDialect即可。在4.1版本

opencv,我的電腦轉換2.49版本3.0版本筆記(vs2015)

會配置的直接從3開始改配置路徑,前面的基本上已經配置過了,出錯的直接重修配置一遍就行, 本系列文章由出品,轉載請註明出處。  寫作當前博文時配套使用的OpenCV版本: 2.4.8、2.4.9、3.0 ( 2014年4月28更新OpenCV 2

日記:opencv python介面函式2.X版本3.X版本變化

         在opencv3.X版本中,沒有了cv2.cv這一模組,其中對視訊屬性的讀取變化如下:          fps = capture.get(cv2.CAP_PROP_FPS)          size = (int(capture.get(cv2.CA

Python2.7版本3.6版本相容問題

環境:Window7 方法:將2.7安裝到C:\Python27下,將3.6安裝到C:\Python36下,在需要使用pthon3 run的.py檔案中,新增shebang line來實現。 shebang line >>>>   #!/usr/

Python2.x3.x主要區別總結(入門Python必備)

Python2.x與3​​.x版本區別(推薦邊看邊用編輯器嘗試)Python的3​​.0版本,常被稱為Python 3000,或簡稱Py3k。相對於Python的早期版本,這是一個較大的升級。為了不帶入過多的累贅,Python 3.0在設計的時候沒有考慮向下相容。許多針對早期

ThinkPHP5.0版本ThinkPHP3.2版本區別

5.0版本和之前版本的差異較大,本篇對熟悉3.2版本的使用者給出了一些5.0的主要區別。 URL和路由 5.0的URL訪問不再支援普通URL模式,路由也不支援正則路由定義,而是全部改為規則路由配合變數規則(正則定義)的方式: 主要改進如下; 增加路由變數規則; 增加組合變

vue-cli 3.0 版本3.0以下版本在搭建專案時的區別

vue-cli 3.0 正式版於 8月10號釋出,但是3.0 與 2.0 版本在搭建專案時到底有何不同呢?下面做一下簡單的介紹,希望可以幫到有需要的朋友 1、 全域性安裝vu-cli 3.0  npm install -g @vue/cli  (如果之前安裝了2.0版本,先

Python 2.7.x 3.x 版本區別小結

pythonpython現在很火,最近花了些時間去了解了一下,最初了解的是2.7.x版本,感覺,從書寫上是很不習慣,少了一雙大概號,取而代之的是縮進;然後跟kotlin和swift一樣省去了每行的分號,象我們這種分號強迫癥的人真心的不習慣;還有!True的條件改成not True、while後面可以跟else

Python 2.7.x 3.x 版本的語法區別

ast ssa pan att 可叠代對象 abcde unicode 用戶 列表 <__future__模塊> Python 3.x引入了一些與Python 2不兼容的關鍵字和特性,在Python 2中,可以通過內置的__future__模塊導入這些新

軟體版本比較大小:1.0.9 1.0.10比較大小

 軟體版本比較大小:字串比較和轉換後大小比較的區別 var version = "1.0.9"; var ocxWebVersion = "1.0.10"; <!DOCTYPE html&g

Lucene同義詞檢索同時精確提取自定義關鍵詞(Lucene版本5.3.0

此博文針對的是Lucene版本5.3.0,若您的Lucene版本為3.X,請移步這裡http://write.blog.csdn.net/postedit/78291868(只提取關鍵詞,未包含同義詞檢索) 本篇文章包含兩個功能 1、精確提取自定義關鍵詞 2、同義詞檢索與

在eclipse中新建Dynamic web project時選擇2.53.0區別(裡面涉及servlettomcat的問題)

1、Dynamic web project時選擇2.5和3.0是指servlet的版本,是2.5的還是3.0的     servlet3.0以後支援非同步 2、dynamic web module和對應的TOMCAT 版本      dynamic web module 2.4  對應Tomcat 5.5

leetcode-1:python基礎,迴圈、條件、列表、字典的應用,enumerate、range函式以及2.03.0print的區別

題目: Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each

Servlet2.5 3.0區別(Servlet 3.0 新特性詳解)

Servlet 3.0 新特性概述 Servlet 3.0 作為 Java EE 6 規範體系中一員,隨著 Java EE 6 規範一起釋出。該版本在前一版本(Servlet 2.5)的基礎上提供了若干新特性用於簡化 Web 應用的開發和部署。其中有幾項特性的引

php配置檔案php.ini詳解(php版本5.3.0

short_open_tag = Off 預設off,開啟後php能夠識別<? ...?>標籤,並且支援<?= 代替 <? echo 。 asp_tags = Off 控制php是否支援<%..%>標籤 precision = 14 控

Android studio低版本3.0編譯通過,更好的用studio看程式碼(找不到原作者那個網址連結了,望見諒!)

最近下載大神們的demo都是用studio3.0的gradle4以上的了,本人電腦太差不想升級 為了更好的看程式碼百度尋得次辦法,在此做個標記(前個月看到的剛才又忘記,一陣好找才找到) 在專案目錄下的gradle.properties中新增 android.enableBu

OpenCV 4.0.1 3.4.5 釋出,Intel 開源的計算機視覺庫

   OpenCV 4.0.1 和 3.4.5 已釋出,OpenCV 是 Intel 開源的計算機視覺庫。它由一系列 C 函式和少量 C++ 類構成,實現了影象處理和計算機視覺方面的很多通用演算法。OpenCV 擁有包括 300 多個 C 函式的跨平臺的中、高層 API。 這兩

Android Studio3.0之前的6種依賴方式3.0之後新增的兩種依賴方式

一 3.0之前的6種方式 共發現6中方式 Compile,Provided,APK,Test compile,Debug compile,Release compile 1.1 Compile 對所有的build type以及f

VC++中Debug除錯版本Release發行版本區別

在寫程式碼過程中,發現 Debug 下執行正常,Release 下就會出現問題,百思不得其解,而Release 下又無法進行除錯,於是只能採用printf方式逐步定位到問題所在處,才發現原來是給定的一個數組未初始化,導致後面處理異常。網上查找了些資料,在這 羅列彙總下,做為備忘~  一

thinkphp5.0 與thinkphp 3.2的區別

thinkphp5.0 1、查詢 $list = DB::table("tp5_websites")->where('id',15)->find(); // 查詢一條語句,帶字首