A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵太云 中级黑马   /  2013-6-13 09:35  /  1915 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不是说,session.save方法不会把数据保存到二级缓存。。。。
@Test
public void testSave(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Classes classes = new Classes();
classes.setCname("新一个班级又开始了");
classes.setDescription("坑爹的班级,我操。。。");

session.save(classes);
transaction.commit();
session.close();

Session session2 = sessionFactory.openSession();
//下面没有发出sql语句,说明,save也把classes对象存入到了二缓存中。
Classes classes2 = (Classes) session2.get(Classes.class, classes.getCid());
System.out.println(classes2.getCid()); //输出。session2.close();
}

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
本帖最后由 Spole_168 于 2013-6-13 13:06 编辑

Session的save()方法完成以下的操作:
    (1)把对象加入到缓存中,使它变为持久化对象。
    (2)选用映射文件指定的标识符生成器为持久化对象分配惟一的OID

     (3)计划执行一个insert语句,把对象当前的属性值组装到insert语句中:

        insert into obj(ID, NAME, ......) values(1, 'Tom', ......);

    值得注意的是,save()方法并不立即执行SQL insert语句。只有当Session清理缓存时,才会执行SQL insert语句。如果在save()方法之后,又修改了持久化对象的属性,这会使得Session在清理缓存时,额外执行SQL update语句。以下两段代码尽管都能完成相同的功能,但是左边代码仅执行一条SQL insert语句,而右边代码执行一条SQL insert和一条SQL update语句。左边代码减少了操作数据库的次数,具有更好的运行性能

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 很给力!

查看全部评分

回复 使用道具 举报
Spole_168 发表于 2013-6-13 13:04
Session的save()方法完成以下的操作:
    (1)把对象加入到缓存中,使它变为持久化对象。
    (2)选用 ...

还是不懂。。。。。。。。。。。。。但是谢谢。。。。
回复 使用道具 举报
楼主尽量问一些java基础性的题目,这样方便在这个培训专区回答。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马