码迷,mamicode.com
首页 > Web开发 > 详细

精通Hibernate——Session的保存、更新、删除和查询

时间:2015-08-20 20:59:13      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:hibernate   session   方法   

session的save方法
使一个临时对象变为持久化对象。
session的save方法完成以下操作:
1、把customer对象加入到缓存中,使他变为持久化对象
2、选用映射文件指定的标识符生成器为持久化对象分配唯一的OID。Customer.hbm.xml文件中id元素的
子元素指定标识符生成器:

<generator>
<id name="id" column="ID" >
    <generator class="increment" />
</id>

在配置文件配置了id自增后,在程序中在setId();是无效的。
3、计划执行一个insert语句,把customer对象当前的属性组装到insert语句中,save方法并不会立即执行sql语句。只有当清理缓存时才会执行insert语句。如果在save方法之后又修改了持久化对象的属性,这会使得Session在清理缓存的时候额外执行Sql 的update语句。以下两段代码尽管都能完成相同功能,第一段代码仅执行了一条insert语句,而右边执行了一条insert语句和一条update语句。第一段代码减少了数据库访问次数,具有更好的性能。

Customer customer = new Customer();
// 先设置customer属性再保存
customer.setName("Tom");
session.save(customer);
tx.commit();
Customer customer = new Customer();
session.save(customer);
// 先保存再设置customer属性
customer.setName("Tom");
tx.commit();

Hibernate通过持久化对象的OID来维持他和数据库相关记录的对应关系。当Customer对象处于持久化状态时,不允许随意修改他的OID。
session的update方法
使一个游离对象转变为持久化对象
session的update方法完成以下操作:
1、把Customer对象重新加入到Session缓存中,使他变为持久化对象
2、计划执行一个update语句。值得注意的是session只在清理缓存的时候执行update
只要通过update方法使游离对象被一个Session关联,即使没有修改Customer对象的任何属性,Session在清理缓存时也会执行由update方法计划的update语句。
如果希望session仅仅当修改了Customer对象的属性时才执行update语句,可以把映射文件中class元素的select-before-update设为true,默认为false;

<class name="mypack.Customers" table="CUSTOMERS" select-before-update="true" /> 

当update方法关联一个游离对象时,如果在session缓存中已经存在相同的OID的持久化对象,会抛出异常。
session的saveOrUpdate方法
saveOrUpdate方法同时包含了save与update方法,如果传入的参数是临时对象,就调用save方法,如果传入的是游离对象就调用update方法,如果传入的是持久化对象就直接返回。那么Hibernate如何判断对象的状态呢?
下面看看临时对象的判断条件:
1、Java对象的OID取值为null
2、Java对象具有version属性并且取值为null
3、在映射文件中为id元素设置了unsaved-value属性,并且OID取值与unsaved-value属性值匹配
4、在映射文件中为version属性设置了unsaved-value属性,并且OID取值与unsaved-value属性值匹配
5、自定义了Hibernate的Interceptor实现类,并且Interceptor的isUnsaved方法返回true
session的load和get方法
Session的load和get方法都能根据OID从数据库中加载一个持久化对象,区别在于:当数据库中没有与之对应的记录时load方法会抛出ObjectNotFoundException异常,get方法返回null。
get方法会在调用之后立即向数据库发出sql语句(不考虑缓存的情况下),返回持久化对象;而load方法会在调用后返回一个代理对象,该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句
Session的delete方法
delete方法用于从数据库中删除与Java对象对应的记录,如果传入的参数是持久化对象,session就计划执行一个delete语句,如果传入的是游离对象,先使游离对象被session关联,使他变为持久化对象,然后计划执行一个delete语句。Session只有在清理缓存的时候才会执行delete语句,只有调用session.close才会从session缓存中删除对象。

精通Hibernate——Session的保存、更新、删除和查询

标签:hibernate   session   方法   

原文地址:http://blog.csdn.net/fuyuwei2015/article/details/47813259

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!