菜鸟学SSH(九)——Hibernate——Session之save()方法
2014-02-19 20:27
465 查看
Session的save()方法用来将一个临时对象转变为持久化对象,也就是将一个新的实体保存到数据库中。通过save()将持久化对象保存到数据库需要经过以下步骤:
1,系统根据指定的ID生成策略,为临时对象生成一个唯一的OID;
2,将临时对象加载到缓存中,使之变成持久化对象;
3,提交事务时,清理缓存,利用持久化对象包含的信息生成insert语句,将持久化对象保存到数据库。
OK,下面来看一个实例:
PS:
1,从Hibernate 4之后,Configuration类中,原先常用的,获取SessionFactory的方法buildSessionFactory()被标记为过时,官方建议使用buildSessionFactory(ServiceRegistry sr)这个方法来获取SessionFactory。
2,如果映射文件中为对象的ID指定了生成策略,那么在程序中为其ID赋值是无效的。会被系统自动生成的值覆盖,例如:
映射文件指定ID生成策略由Hibernate控制自增:
然后程序中进行如下操作:
这样,最终存入数据库的ID是Hibernate自动生成的自增ID,而不是我们手动给的值。
另外,执行save()方法时并不会将对象存入数据库,在提交事务时,对象才被真正的保存到数据库中。save()方法是将对象保存到Session的缓存中,提交事务时,Hibernate会生成相应的insert语句,将对象保存到数据库。
再跟大家说一点需要注意的地方,Hibernate在提交事务的时候,会将之前对对象做的操作一并提交。就算是在save()方法之后做的操作也一样。什么意思呢?我们看下面的例子:
执行以上操作,最终user.getUserName();得到的值将会是“new”,而不会是“old”,因为Hibernate在提交事务的时候把对user对象的所有操作都提交了。
OK,今天就到这里,save()方法虽然看起来是一个很简单的方法,但是需要注意这些细小的地方,否则很容易出一些问题。一句话:学习框架的原理很重要,要想理解框架的原理,最直接的办法就是看源码。
每天学一点,每天进步一点。祝大家每天进步。
1,系统根据指定的ID生成策略,为临时对象生成一个唯一的OID;
2,将临时对象加载到缓存中,使之变成持久化对象;
3,提交事务时,清理缓存,利用持久化对象包含的信息生成insert语句,将持久化对象保存到数据库。
OK,下面来看一个实例:
//创建SessionFactory Configuration config = new Configuration(); ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); SessionFactory sessionFactory = config.buildSessionFactory(sr); //打开Session Session session = sessionFactory.openSession(); //开启事务 Transaction tx = session.beginTransaction(); //创建临时对象并赋值 User user = new User(); user.setId("1"); user.setUserName("lsj"); session.save(user); //提交事务 tx.commit(); //关闭Session session.close();
PS:
1,从Hibernate 4之后,Configuration类中,原先常用的,获取SessionFactory的方法buildSessionFactory()被标记为过时,官方建议使用buildSessionFactory(ServiceRegistry sr)这个方法来获取SessionFactory。
2,如果映射文件中为对象的ID指定了生成策略,那么在程序中为其ID赋值是无效的。会被系统自动生成的值覆盖,例如:
映射文件指定ID生成策略由Hibernate控制自增:
<id name="id" type="string"> <generator class="increment"> </id>
然后程序中进行如下操作:
user.setId("1"); System.out.println("手动赋值为:"+user.getId()); session.save(user); System.out.println("存入数据库的值为:"+user.getId());
这样,最终存入数据库的ID是Hibernate自动生成的自增ID,而不是我们手动给的值。
另外,执行save()方法时并不会将对象存入数据库,在提交事务时,对象才被真正的保存到数据库中。save()方法是将对象保存到Session的缓存中,提交事务时,Hibernate会生成相应的insert语句,将对象保存到数据库。
再跟大家说一点需要注意的地方,Hibernate在提交事务的时候,会将之前对对象做的操作一并提交。就算是在save()方法之后做的操作也一样。什么意思呢?我们看下面的例子:
user.setUserName("old"); session.save(user); user.setUserName("new"); tx.commit();
执行以上操作,最终user.getUserName();得到的值将会是“new”,而不会是“old”,因为Hibernate在提交事务的时候把对user对象的所有操作都提交了。
OK,今天就到这里,save()方法虽然看起来是一个很简单的方法,但是需要注意这些细小的地方,否则很容易出一些问题。一句话:学习框架的原理很重要,要想理解框架的原理,最直接的办法就是看源码。
每天学一点,每天进步一点。祝大家每天进步。
相关文章推荐
- 菜鸟学SSH(九)——Hibernate——Session之save()方法
- hibernate 的Session中save和load,close方法的底层实现原理
- SSH整合时候Hibernate正确执行了save方法,但是数据没有保存到数据库
- ssh整合思想 Spring与Hibernate和Struts2的action整合 调用action添加数据库 使用HibernateTemplate的save(entity)方法
- hibernate中Session常用方法那些事(save(),flush(),delete().......)
- Hibernate中session的save方法以及缓存的清理
- Hibernate学习篇11——session方法之save与persist
- SSH学习之Hibernate session的方法全集
- Hibernate深入理解----03Session缓存核心方法(save()和persist(),get()和load(),update()和saveOrUpdate,delete()和evil()
- SSH中将hibernate托管给spring获取session的方法
- Hibernate学习篇12——session方法之save与update
- Hibernate: Session对象中的两个保存记录的方法 save vs. persist
- [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作
- 初学hibernate,调用session的save方法不起作用的解决
- Hibernate的Session接口中save/delete/update方法2个参数(entityName)的深入解析
- SSH 集成项目中getHibernateTemplate().save(Object obj)方法保存数据不能commit 解析
- Hibernate 的Session 中的save()方法和persist()方法有什么区别
- hibernate框架中session的save() 和 update() 方法的区别 saveOrUpdate()方法
- SSH之Hibernate save或update方法已经执行,但是数据库没保存数据
- hibernate的session.save/persisten方法的区别