zoukankan      html  css  js  c++  java
  • hibernate之4.延迟载入

    延迟载入:

    仅仅有当使用以实体对象的属性(除主键属性外)时,才会发送查询语句到数据库


    get不支持延迟载入

    @Test
    	public void getTest(){
    		Session session=null;
    		Student student=null;
    		try{
    			session=HibernateUtil.openSession();
    			student=(Student) session.get(Student.class, 3);
    			System.out.println("id:"+student.getStudentId());
    			System.out.println("name:"+student.getStudentName());
    		}finally{
    			session.close();
    		}
    	}

    结果:

    Hibernate: select student0_.student_id as student1_0_0_, student0_.student_name as student2_0_0_, student0_.age as age0_0_ from t_student student0_ where student0_.student_id=?
    id:3
    name:ddddd

    在调用get方法时,就已经发出查询语句

    load支持延迟载入

    @Test
    	public void loadTest(){
    		Session session=null;
    		Student student=null;
    		try{
    			session=HibernateUtil.openSession();
    			student=(Student) session.load(Student.class, 3);
    			System.out.println("id:"+student.getStudentId());
    			System.out.println("name:"+student.getStudentName());
    		}finally{
    			session.close();
    		}
    		
    	}

    结果:

    id:3
    Hibernate: select student0_.student_id as student1_0_0_, student0_.student_name as student2_0_0_, student0_.age as age0_0_ from t_student student0_ where student0_.student_id=?
    name:ddddd

    在调用load方法,返回一个代理对象,此时并没有发出查询语句,当须要使用studentName属性时,再发出查询语句


    关闭session后

    get:

    @Test
    	public void get2Test(){
    		Session session=null;
    		Student student=null;
    		try{
    			session=HibernateUtil.openSession();
    			student=(Student) session.get(Student.class, 3);
    		}finally{
    			session.close();
    		}
    		System.out.println("id:"+student.getStudentId());
    		System.out.println("name:"+student.getStudentName());
    	}

    结果:

    Hibernate: select student0_.student_id as student1_0_0_, student0_.student_name as student2_0_0_, student0_.age as age0_0_ from t_student student0_ where student0_.student_id=?

    id:3 name:ddddd


    与在session作用域中的结果一样


    load

    @Test
    	public void load2Test(){
    		Session session=null;
    		Student student=null;
    		try{
    			session=HibernateUtil.openSession();
    			student=(Student) session.load(Student.class, 3);
    		}finally{
    			session.close();
    		}
    		System.out.println("id:"+student.getStudentId());
    		System.out.println("name:"+student.getStudentName());
    	}

    结果:

    id:3
    org.hibernate.LazyInitializationException: could not initialize proxy - no Session

    抛异常了,可见延时载入仅仅在session的作用域内有效

    小结:

    1.仅仅有当使用以实体对象的属性(除主键属性外)时,才会发送查询语句到数据库

    2.延时载入仅仅在session的作用域内有效



  • 相关阅读:
    防采集策略『blueidea』
    关于进程和线程『整理』
    数据采集『blueidea』
    搜索引擎营销的一些策略『来源:点石互动搜索引擎优化博』
    AJAX之通讯技术简介
    使用AJAX技术构建更优秀的Web应用程序
    AJAX相关JS代码片段和浏览器模型『』
    RDLC报表:每页显示N条记录
    ObjectMapper .NET
    How to Hash Data with Salt
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6986230.html
Copyright © 2011-2022 走看看