Hibernate各类概念-GET和LOAD的区别

通过id获取Product对象有两种方式,分别是get和load 
他们的区别分别在于 
1. 延迟加载 
2. 对于id不存在的时候的处理

  • 延迟加载

    load方式是延迟加载,只有属性被访问的时候才会调用sql语句
    get方式是非延迟加载,无论后面的代码是否会访问到属性,马上执行sql语句
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
     
    import com.how2java.pojo.Product;
     
    public class TestHibernate {
        public static void main(String[] args) {
            SessionFactory sf = new Configuration().configure().buildSessionFactory();
     
            Session s = sf.openSession();
            s.beginTransaction();
            System.out.println("log1");
            Product p = (Product) s.get(Product.class, 1);
            System.out.println("log2");
            Product p2 = (Product) s.load(Product.class, 2);
            System.out.println("log3");
            System.out.println(p2.getName());
            System.out.println("log4");
             
            s.getTransaction().commit();
            s.close();
            sf.close();
        }
    }
  • 对于id不存在的对象的处理

    都通过id=500去获取对象 
    1. get方式会返回null 
    2. load方式会抛出异常
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
     
    import com.how2java.pojo.Product;
      
    public class TestHibernate {
        public static void main(String[] args) {
            SessionFactory sf = new Configuration().configure().buildSessionFactory();
      
            Session s = sf.openSession();
            s.beginTransaction();
            System.out.println("log1");
            Product p = (Product)s.get(Product.class, 5);
            System.out.println("log2");
            Product p2 = (Product)s.load(Product.class, 5);
            System.out.println("log3");
             
            Product p3 = (Product)s.get(Product.class, 500);
            System.out.println("p3="+p3);
             
            Product p4 = (Product)s.load(Product.class, 500);
            System.out.println("p3="+p4);
             
            s.getTransaction().commit();
            s.close();
            sf.close();
        }
    }
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值