Session:
save:
有两个save方法,save(Object) save(Object, ID),后者可以动态的指定对象的id属性。如果动态
指定id属性时,该类的id生成策略是依赖本地数据库的话就会抛出异常。
update:
该方法将一个游离态的对象转变为持久态的,如果Session的缓存中存在与参数对象具有相同的id
时,该方法会抛出异常。
当我们调用update方法时,就会生成一条 update 的SQL语句,如果该对象的状态并没有发生改变
这样就会生成不必要的访问数据库。在映射文件的 Class 元素中加入 select-before-update=true
<class="" table="" select-before-update="true">
该属性默认为 false,当配置该属性为 true 时,Hibernate在update对象前就会生成一条select
语句来查询该对象,然后比较该对象的状态是否发生改变的情况来判断是否要生成 update 语句。
当然对同一个对象的多次 update 操作,不会生成多条 update 语句,只有在Session清理缓存的
时候才会根据对象状态的改变而生成 一条 SQL语句。
应根据实际的应用情况来使用该属性,如果Java对象的属性状态不会经常发生改变,使用该数据
可以减少不必要的 update ,这样会响应提高程序的性能,如果经常改变对象的状态还是不使用
该属性的好。
saveOrUpdate:
该方法会根据对象的状态来对其进行不同的操作,如果方法传入的是一个临时态对象,就save。
如果是一个游离态对象就update,如果是一个持久化对象就返回。那么,如果一个对象满足以下
任何一个条件,那么这个对象就是一个临时态的对象。
(1):Java对象的 oid 为 null
(2):对象具有 version 属性并取值为 null
(3):映射文件中为 <id> 元素设置了 unsaved-value 属性,并且该id与配置的属性值匹配。
<id name="" column="" unsaved-value=0>
<generator class="increment"></generator>
</id>
(4):映射文件中为 version 属性配置了 unsaved-value ,并且该属性值与配置的值相匹配。
(5):自定义了Hibernate 中 Interceptor 的实现类,并且该 interceptor 类的isUnsaved()
方法返回值为 true。
get load :
这两个方法都能从数据库中查询一条记录,并返回一个持久化的对象。区别在与,如果数据库中
没有一条记录与要查询的对象 id 对应,load 方法会抛出 ObjectNotFoundException 异常,而
get 方法会返回 null。
delete:
该方法是删除一个与对象对应的数据库记录,如果传人是 持久化对象 就会在清理缓存时执行delete
语句,在Session.close时从缓存中删除该对象。如果传入的是 游离态 对象,Session会先关联该
对象,使其转换为 持久态 对象,然后执行一个delete语句。
delete ("from table where id > 5"); 方法重载,删除多条记录。