19. 一級緩衝(session級緩衝)

來源:互聯網
上載者:User

hibernate一級緩衝,又稱為sesssion級緩衝

      

一級緩衝生命週期很短和session的生命週期一致,一級緩衝也叫session級的緩衝或事務級緩衝。主要用來緩衝實體物件的,而不會對實體物件的普通屬性進行緩衝

 

支援一級緩衝的方法:

       * get()

       * load()

       * iterate(查詢實體物件)

      

管理一級緩衝的方法:

       * session.clear(),session.evict()

      

如何避免一次性大量的實體資料入庫導致記憶體溢出

       * 先flush,再clear

      

如果資料量特別大,考慮採用jdbc實現,如果jdbc也不能滿足要求可以考慮採用資料本身的特定匯入工具     

測試案例(該測試案例基於一對多雙向關聯映射):

package com.bjsxt.hibernate;

 

import java.io.Serializable;

import org.hibernate.Session;

import junit.framework.TestCase;

 

public class CacheLevel1Test extends TestCase {

 

       /**

        * 在同一個session中發出兩次load查詢

        */

       public void testCache1() {

              Session session = null;

              try {

                     session = HibernateUtils.getSession();

                     session.beginTransaction();

                    

                     Student student = (Student)session.load(Student.class, 1);

                     System.out.println("student.name=" + student.getName());

                    

                     //不會發出sql,因為load使用緩衝

                     student = (Student)session.load(Student.class, 1);

                     System.out.println("student.name=" + student.getName());

                    

                     session.getTransaction().commit();

              }catch(Exception e) {

                     e.printStackTrace();

                     session.getTransaction().rollback();

              }finally {

                     HibernateUtils.closeSession(session);

              }

       }           

 

       /**

        * 在同一個session中發出兩次get查詢

        */

       public void testCache2() {

              Session session = null;

              try {

                     session = HibernateUtils.getSession();

                     session.beginTransaction();

                    

                     Student student = (Student)session.get(Student.class, 1);

                     System.out.println("student.name=" + student.getName());

                    

                     //不會發出sql,因為get使用緩衝

                     student = (Student)session.get(Student.class, 1);

                     System.out.println("student.name=" + student.getName());

                    

                     session.getTransaction().commit();

              }catch(Exception e) {

                     e.printStackTrace();

                     session.getTransaction().rollback();

              }finally {

                     HibernateUtils.closeSession(session);

              }

       }    

      

       /**

        * 在同一個session中發出兩次iterate查詢實體物件

        */

       public void testCache3() {

              Session session = null;

              try {

                     session = HibernateUtils.getSession();

                     session.beginTransaction();

                    

                     Student student = (Student)session.createQuery("from Student s where s.id=1").iterate().next();

                     System.out.println("student.name=" + student.getName());

                    

                     //會發出查詢id的sql,不會發出查詢實體物件的sql,因為iterate使用緩衝

                     student = (Student)session.createQuery("from Student s where s.id=1").iterate().next();

                     System.out.println("student.name=" + student.getName());

                    

                     session.getTransaction().commit();

              }catch(Exception e) {

                     e.printStackTrace();

                     session.getTransaction().rollback();

          &

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.