Session的保存、删除及更新方法
来源:互联网 发布:js设置class样式 编辑:程序博客网 时间:2024/05/21 18:04
Session的保存、删除及更新方法
(1) save()方法:将一个对象的属性取出放入PreparedStatement语句中,然后向数据库中插入一条记录(或多条,如果有级联)。
调用save()方法将临时对象保存到数据库中,对象的临时状态将变为持久化状态,当对象在持久化状态时,他一直位于Session的缓存中,对他的任何操作在事务提交时都将同步到数据库,因此,对一个已经持久化的对象调用save()或update()方法都是没有意义的。
当Session保存一个对象时,按照以下的步骤进行:
a) 根据配置文件为主键id设置的生成算法,为对象生成一个id
b) 将对象纳入session的内部缓存(一个map)
c) 事务提交时,清理缓存,将新的对象通过insert语句持久化到数据库中。
(2) Update()方法:重新关联托管对象为持久化状态对象;显示调用以更新对象。
a) Update()方法不发送SQL语句:调用update()方法时,并不立即发送sql语句,对对象的更新操作将累计起来,在事务提交时有flush()清理缓存,然后发送一条sql语句完成全部的更新操作。
b) Hibernate总是执行update()方法:在使用update()方法进行托管对象关联时,不管这个托管对象在离开Session之后有没有进行更改,在清理缓存时Hibernate总是发送一条update语句,以确保托管对象和数据库记录的数据一致。
c) 先执行select语句来判断,然后才执行update语句:把映射文件中<class>标签的select-before-update设为true,这样在执行这一个类的update语句之前,Hibernate都会发送一条select语句取得数据库中的值,和当前对象的值进行比较,如果值相同则不必发送update语句,只有不相同时才发送。
d) 批量更新:在配置文件hibernate.cfg.xml中设置<property name=”hibernate.jdbc.batch_size”>30</property>则在累积到30条语句时才向数据库发送。在进行批量操作时(包括更新、删除),最好的方法是调用JDBC的API进行操作。
(3) saveOrUpdate()方法:兼具save()和update()方法,对于传入的对象,该方法首先是判断其是托管对象还是临时对象,然后调用合适的方法。
Hibernate判断对象是临时对象的方法:
a) 在映射文件中<id>标签设置了unsaved-value属性,并且实体对象的id取值和unsaved-value匹配(默认为null)
b) 在映射文件中<version>标签设置了unsaved-value属性,并且实体对象的id取值和unsaved-value匹配(默认为null)
(4) Delete()方法:负责删除一个对象(包括持久对象和托管对象)。为了解决批量删除的问题,常用的办法是使用bulk delete方法
Query query= session.createQuery(“delete from student”);
Query.executeUpdate();
但是他也有问题,批量删除后的数据还会在缓存中,因此程序查询时可能得到脏数据。
- Session的保存、删除及更新方法
- Session的基本介绍与操作:保存、更新、查看、删除
- 精通Hibernate——Session的保存、更新、删除和查询
- Hibernate 数据的保存,更新和删除
- Hibernate 数据的保存,更新和删除
- 使用数据库保存session的方法
- 使用数据库保存session的方法
- 使用数据库保存session的方法
- 使用数据库保存session的方法
- Safari不能保存session的处理方法
- Wireshark 保存Filter的删除方法
- js保存、获取、删除cookie的方法
- 联接的删除方法和更新方法
- hibernate级联保存更新、删除
- 删除Oracle非活动Session的方法
- php中两种彻底删除session的方法
- 数据库主外键,级联的保存、更新和删除
- Grails中数据的保存、更新和删除。
- 在Flash Builder 4 beta中使用Pixel Bender作为数值运算引擎(二)
- MINI6410 按键驱动 源码分析 原理图 下
- 网络词汇泛滥:神马都是浮云?
- DEVACCESS 开发用户表
- Android学习路程-------新手入门(一)
- Session的保存、删除及更新方法
- 有关OpenCV中图像深度的问题,期待有人回答
- C++中虚函数
- 在Flash Builder 4 beta中使用Pixel Bender作为数值运算引擎(三)
- windows控制台程序使用TIMER
- 防水+四扬声器诺基亚X7细节
- 全国独家首测 腾讯QQ 2011 Beta1体验
- 不一样的课程表,不一样的Excle--用Excle进行设计(32):排版与分栏
- css hack