日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Hibernate openSession() 和 getCurrentSession的区别 .

發布時間:2025/6/15 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate openSession() 和 getCurrentSession的区别 . 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

getHiberanteTemplate 、getCurrentSession和OpenSession
采用getCurrentSession()創建的Session會綁定到當前的線程中去、而采用OpenSession()則不會。

采用getCurrentSession()創建的Session在commit或rollback后會自動關閉,采用OpenSession()必須手動關閉。

采用getCurrentSession()需要在Hibernate.cfg.xml配置文件中加入如下配置:

如果是本地事物,及JDBC一個數據庫:

<propety name=”Hibernate.current_session_context_class”>thread</propety>

如果是全局事物,及jta事物、多個數據庫資源或事物資源:

<propety name=”Hibernate.current_session_context_class”>jta</propety>

使用spring的getHiberanteTemplate 就不需要考慮事務管理和session關閉的問題:

public List getEntityCriteria(final DetachedCriteria detachedCriteria) {
??????? return (List) getHibernateTemplate().executeFind(
??????????????? new HibernateCallback() {
??????????????????? public Object doInHibernate(Session session)
??????????????????????????? throws HibernateException {
??????????????????????? Criteria criteria = detachedCriteria
??????????????????????????????? .getExecutableCriteria(session);
??????????????????????? return criteria.list();
??????????????????? }
??????????????? });
??? }
??? public List getEntityCriteriaByPage(final DetachedCriteria detachedCriteria,final Page page) {
??????? return (List) getHibernateTemplate().executeFind(
??????????????? new HibernateCallback() {
??????????????????? public Object doInHibernate(Session session)
??????????????????????????? throws HibernateException {
??????????????????????? Criteria criteria = detachedCriteria
??????????????????????????????? .getExecutableCriteria(session);

??????????????????????? criteria.setFirstResult(page.getFirstItemPos());
??????????????????????? criteria.setMaxResults(page.getPageSize());
??????????????????????? return criteria.list();
??????????????????? }
??????????????? });
??? }

DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Department.class);

detachedCriteria.add(Restrictions.eq("eid", seacher.getEid()));//企業id為條件查詢

detachedCriteria.add(Restrictions.in("dprtid", ids));//根據id數組查詢部門

detachedCriteria.add(Restrictions.like("name", "%" + seacher.getName()+ "%"));//名稱模糊查詢

getEntityCriteriaByPage(detachedCriteria,pageinfo);

經過檢查激活連接為0,被使用的連接總是為1(應為自己測試)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 package com.myj.hibernate.model;   import org.hibernate.HibernateException;   import org.hibernate.SessionFactory;   import org.hibernate.cfg.AnnotationConfiguration;   import org.hibernate.classic.Session;   import org.junit.AfterClass;   import org.junit.BeforeClass;   import org.junit.Test;   public class TeacherTest {   public static SessionFactory sessionFactory = null;   @BeforeClass   public static void beforeClass() {   try {   sessionFactory = new AnnotationConfiguration().configure().buildSession Factory();   } catch (HibernateException e) {   e.printStackTrace();   }   }   @Test   public void testTeacherSave() {   Teacher teacher = new Teacher();   teacher.setName("martian");   teacher.setAge(23);   Session session = sessionFactory.getCurrentSession();   session.beginTransaction();   session.save(teacher);   //測試getCurrentSession()方法,這里輸出true,因為在一個事務內,所以取得線程中的session   Session session1 = sessionFactory.getCurrentSession();   System.out.println(session == session1);   //commit()之后不用close(),假如使用sessionFactory.openSession();就需要close();   session.getTransaction().commit();   //測試getCurrentSession()方法,這輸出false,上一個事務已經提交,這里將重新生成一個session   Session session2 = sessionFactory.getCurrentSession();   System.out.println(session == session2);   }   @AfterClass   public static void afterClass() {   sessionFactory.close();   }   }

總結

以上是生活随笔為你收集整理的Hibernate openSession() 和 getCurrentSession的区别 .的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。