Hibernate单条查询语句get/load方法区别

  • 下午看了Hibernate的视频,讲到了单条查询语句get和load方法的区别,主要有三点:

    • get方法会返回一个持久化类的对象,load方法则返回一个代理对象,其中只保存了持久化类的id属性
    • get方法查询时会立即执行sql语句,load方法查询时则不会立即执行sql语句,而是当真正用到被查询对象(即被查询数据)的某个其他属性(即该条数据字段)时,才会去执行sql语句
    • 当被查询对象不存在(即数据库中某条数据不存在)时,get方法会返回一个null,而load方法会直接抛出异常(org.hibernate.ObjectNotFoundException)
  • 打开eclipse测试一下get和load方法的区别:

    @Test
    public void loadAndGet() {
        Student s = new Student("小黄", 98, "男", new Date());
        Student s1 = new Student("小李", 28, "男", new Date());
        session.save(s);
        session.save(s1);
        Student sGet = (Student) session.get(Student.class, 1);
        Student sLoad = (Student) session.load(Student.class, 2);

        System.out.println(sGet.toString());
        System.out.println(sLoad.toString());

    }
  • 设置开启sql语言的打印和格式化,主键的生成策略为native。JUnit测试正常无报错,数据库正确生成表并保存数据,按照上面贴出的代码段,应该get和load方法都会打印输出select语句(重写了student对象的toString()方法,用到了student的所有属性,所以load方法也执行了sql语句),但是发现怎么也看不见select语句的打印输出!!!!只有建表跟插入语句。
  • 于是又测试了hibernate的update、delete方法,也能打印正确的update跟delete的sql语句,就是不打印select!!!!
  • 解决:hibernate.cfg.xml配置文件中建表模式问题:
    <property name="hbm2ddl.auto">create</property>
    create模式下就是不打印select语句,非常执着~~,其他一切正常,改为update方式后即可打印select语句。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值