Hibernate Session load() get()

    /** 
         * 测试load方法 
         * 一旦加载了持久化实例之后,在代码中对持久化实例所做的修改,将会被保存到数据库中。 
         * 程序对持久化实例所做的修改会在session flush之前被自动保存到数据库中, 
         * 无需程序调用其他方法(不需要调用update方法)。也就是说修改对象的最简单方法就是在session处于打开状态时load它, 
         * 然后直接修改即可。这种方法有一个极大的性能缺陷:当需要修改某条记录的时候,这种做法会产生两条sql语句: 
         * 一条用于查询指定记录,一条用于修改该记录。 
         */  
        public static void testLoad(){  
            Configuration cfg = new Configuration().configure();  
            SessionFactory factory = cfg.buildSessionFactory();  
            Session session = factory.openSession();  
            Transaction transaction = session.beginTransaction();  
            Company company = (Company) session.load(Company.class, 1);  
            System.out.println(company.getShortName());  
            company.setShortName("总公司");  
            transaction.commit();  
            session.close();  
            System.out.println(company.getShortName());  
        }  
          
        /** 
         * 测试get方法 
         */  
        public static void testGet(){  
            Configuration cfg = new Configuration().configure();  
            SessionFactory factory = cfg.buildSessionFactory();  
            Session session = factory.openSession();  
            Transaction transaction = session.beginTransaction();  
            Company company = (Company) session.get(Company.class, 1);  
            System.out.println(company.getShortName());  
            company.setShortName("总厂");  
            transaction.commit();  
            session.close();  
            System.out.println(company.getShortName());  
        }  
          
        /** 
         * 测试load与get方法在数据库中没有匹配记录时的反应 
         * 该程序的输出为:get方法返回值为null。原因: 
         * 如果没有匹配的数据库记录,load方法可能抛出异常HibernateException;如果在类映射文件中指定延迟加载, 
         *          则load方法会返回一个未初始化的代理对象,这个代理对象并没有装载数据库对象,直到程序调用该代理对象的某方法时, 
         *          hibernate才访问数据库。默认情况下为延迟加载 
         * get方法立即访问数据库,如果没有对应的记录,get方法返回null 
         * 两者的主要区别在是否延迟加载。 
         */  
        public static void testLoadAndGet(){  
            Configuration cfg = new Configuration().configure();  
            SessionFactory factory = cfg.buildSessionFactory();  
            Session session = factory.openSession();  
            Transaction transaction = session.beginTransaction();  
            Company company = (Company) session.get(Company.class, 11);  
            if(company == null){  
                System.out.println("get方法返回值为null");  
            }  
            Company company1 = (Company)session.load(Company.class, 11);  
            if(company1 == null){  
                System.out.println("load方法返回值为null");  
            }  
            transaction.commit();  
            session.close();  
        }  

 

posted @ 2016-09-07 17:49  LinVan  阅读(122)  评论(0)    收藏  举报