黑马程序员技术交流社区

标题: hibernate中的session.save方法的问题。 [打印本页]

作者: 赵太云    时间: 2013-6-13 09:35
标题: hibernate中的session.save方法的问题。
不是说,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();
}
作者: Spole_168    时间: 2013-6-13 13:04
本帖最后由 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语句。左边代码减少了操作数据库的次数,具有更好的运行性能

作者: 赵太云    时间: 2013-6-13 14:30
Spole_168 发表于 2013-6-13 13:04
Session的save()方法完成以下的操作:
    (1)把对象加入到缓存中,使它变为持久化对象。
    (2)选用 ...

还是不懂。。。。。。。。。。。。。但是谢谢。。。。
作者: 袁梦希    时间: 2013-6-14 18:15
楼主尽量问一些java基础性的题目,这样方便在这个培训专区回答。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2