hibernate核心開發接口介紹

Configuration

(1) AnnotationConfiguration

(2) 進行配置信息的管理

(3) 用來產生SessionFactory

(4) 可以在Configure方法中指定hibernate配置文件(不指定則默認爲

”hibernate.cfg.xml”)

(5) 只需關注一個方法即:buildSessionFactory()

注:不使用默認的hibernate.cfg.xml文件的情況

Teacher t = new Teacher();

t.setId(2);

t.setName("yilong");

t.setTitle("中級");

      

Configuration cfg = new AnnotationConfiguration();

SessionFactory sf =

cfg.configure(“hibernate.xml”).buildSessionFactory();

Session session = sf.openSession();

session.beginTransaction();

session.save(t);

session.getTransaction().commit();

session.close();

       sf.close();

           則程序會去找build path目錄下的”hibernate.xml”文件(放在src目錄下即可)

           面試 另外,還可以使用下面的方法創建一個Session

           Session session = sessionFactory.getCurrentSession();

           表示如果當前上下文環境下沒有Session就自動創建一個,有就不用再創建,因此使用該方法創建的session在提交之前無論調用多少次getCurrentSession()方法得到的都是同一個Session(提交commit後再創建出來的就不一樣了)

           上述的Session session = sf.openSession();方法表示直接創建一個新的Session,而不管是否已經存在,因此是比較久的一種創建Session的方法;

           另外一個更加重要的區別是通過getCurrentSession創建的Session最後不需要調用session.close()方法(調用了反而會報錯),因爲在提交(commit)事務後會自動close。開發項目中openSession()方法往往不能實現將兩個session操作放在同一個事務裏,因此用getCurrentSession()能夠界定事務邊界。

           上述提到的上下文環境是通過hibernate.cfg.xml配置文件設置的,表示的是從當前線程裏面找是否存在Session,具體配置語句如下:

           <property name="current_session_context_class">thread</property>

裏面的參數往往設置爲jta或者thread(使用了getCurrentSession方法就必須將其設置爲thread,否則會報錯:org.hibernate.HibernateException: No CurrentSessionContext configured!)

           而使用thread則是調用基本的Connection方式管理事務:

           Connection conn = DriverManager.getConnection(“……”);

           conn.setAutoCommit(false);

           ……

           conn.commit();

           conn.setAutoCommit(true);

           但是,有些情況只用一個Connection對象是管理不了事務的(例如:分佈在多臺不同數據庫的服務器上的事務的情況),這個時候就需要提供一個事務管理器(tomcat不行,藉助spring才行,JBOSS可以)。而jta(JAVA Transaction API)就是JAVA裏專門用於管理事務的API,因此jta可以解決上面的分佈式事務,但是由於tomcat不提供事務管理器的功能,因此不能設置爲jta

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章