Session 常用方法:save、update、saveOrUpdate
save方法
该方法传入的参数是临时对象
//启动事务1 trans=session.beginTransaction(); /*临时对象*/ Student student=new Student(); student.setId("2017"); student.setName("Vin"); student.setGender("female"); student.setAge(17); session.save(student); trans.commit();
若save方法传入的是持久化对象直接返回,不起作用,若属性变化则更新,否则不更新
//启动事务1 trans=session.beginTransaction(); /*持久化对象,使用反射了解类的结构*/ Student student=(Student)session.get(Student.class, "2016"); System.out.println(student); /*不起作用,不会执行insert SQL语句*/ session.save(student); trans.commit();
更新持久化对象并保存,清理一级缓存时,会与快照对比,如果发生了更新则执行同步到数据库。如果此时对该类开启了二级缓存,并设置访问策略为 “read-only”,那么此处将不能修改该持久化对象,否则将发生异常。
//启动事务1 trans=session.beginTransaction(); /*持久化对象,使用反射了解类的结构*/ Student student=(Student)session.get(Student.class, "2016"); System.out.println(student); student.setAge(25); /*发生了改变,将执行update SQL语句*/ session.save(student); trans.commit();
若save方法传入的游离对象,那就将其作为临时对象处理进行保存
//启动事务1 trans=session.beginTransaction(); /*持久化对象,使用反射了解类的结构*/ Student student=(Student)session.get(Student.class, "2016"); System.out.println(student); /*使持久化对象成为游离对象,清理缓存或将指定对象清理缓存*/ //session.clear(); session.evict(student); /*会执行insert SQL语句,在主键不冲突的情况下,将记录插入到数据库中*/ session.save(student); trans.commit();
update方法
该方法传入的参数是游离对象
若update方法传入的是临时对象且OID=null,那么久抛异常。若update方法传入的是临时对象且OID!=null,那就执行update语句。
//启动事务1 trans=session.beginTransaction(); /*持久化对象,使用反射了解类的结构*/ //Student student=(Student)session.get(Student.class, "2016"); //System.out.println(student); /*只能更新在数据库表里已经存在的,如下,数据表中已有"2015"这个主键*/ Student stu=new Student(); stu.setId("2015"); stu.setName("Hello"); stu.setGender("female"); stu.setAge(19); session.update(stu); trans.commit();
若update方法传入的是持久化对象,那么直接返回不起作用。若属性发生变化则更新,否则不更新。
//启动事务1 trans=session.beginTransaction(); /*持久化对象,使用反射了解类的结构*/ Student student=(Student)session.get(Student.class, "2016"); System.out.println(student); student.setAge(22); session.update(student); trans.commit();
若update方法传入的是游离对象那么就进行update更新,不管属性是否发生变化
//启动事务1 trans=session.beginTransaction(); /*持久化对象,使用反射了解类的结构*/ Student student=(Student)session.get(Student.class, "2016"); System.out.println(student); /*清理一级缓存,使之成为游离对象*/ session.clear(); session.update(student); trans.commit();
saveOrUpdate方法
该方法包含了save和update方法的功能,如果传入的参数是临时对象,就调用save方法,如果传入的参数是游离对象(数据库表中可能是有记录的),那么就调用update方法,如果传入的参数是持久化对象,那么直接返回不起作用,若属性发生变化则更新,否则不更新