Hibernate的Session的一点记录
来源:互联网 发布:高分数据应用 编辑:程序博客网 时间:2024/06/05 17:03
系统出现一个bug,还好处于regular测试阶段。
排查最后,居然又是Hibernate的Session问题,看来优点总会伴随些缺点。
/**
* 1.
* 从Dao得到的ID相同的两个Bean,就会发生Hibernate的Session同步,保持Session中仅仅有一个Bean;
* 因此,如果改动一个引用的ID值,Hibernate就会报错,因为这两个Bean都在Session中却ID不同;
*/
/** 2.
* Hibernate在每次执行Dao操作的时候,就会同步Session中的Bean;
* 本质上说,Session中仅仅有且只能有一个实体Bean,因此如果改变了数据库里的值,或者一个引用ref_1的Bean属性变化之后
*
* 3. Session会自动执行同步操作,保持与数据库同步
*/
/**
* 4.
* 新建一个bean,并且copy属性和ID过去,此时并不会发生“Hibernate同步”;
* 因此把ID重设,就有了一个独立的Bean,此Bean除了ID不同外,其他属性相同;
*/
/**
* 总结:
* #1 Session中的实体以ID作为标识; 因此如果两个Bean的ID相同,且都在Session中,则这两个Bean其实是一个实体,不论引用名称是否相同。
* #2 Session会主动同步数据库记录和Session中Bean,保持一致; 因此,如果通过此Session更新了数据库某些字段值,Session中的Bean也自动更新了。
* 但是,如果通过其他是Session和线程更新了数据库,此Session并不理会,也就是不会同步。
* #3 本质上,Hibernate就认为自己的Session就相当于数据库的缓存,并认为二者是同步的,并且尽最大努力保持其同步;
* 保持同步的方法是:每次查询一个Bean之前,先update一下数据库这个Bean对应的记录(注意是此时锁住的数据库)。
* 假设当前线程改变了Session中的Bean属性,
* Hibernate在下次查询之前会先update一下数据库,这样保持了Session和DB同步;
* 如果没有下一次查询,则不会update数据库;
* 在每次select之时,会先看Session中有没有这个Bean,如果有则用之,而不会真去查数据库;
* 联系#2 就会知道,如下步骤会出错:
* (1)Hibernate查询记录id=123456,name=aaa,age=18,并更新了Session
* (2)另外一个线程更新了id=123456的记录属性name=bbb,此时Hibernate的Session不知道,name依然为aaa
* (3)Hibernate仅仅更新id=123456的记录的age属性为36,commit
* (4)结果另一个线程的更新被覆盖!
* (5)Hibernate的Session中的Bean属性变换时,或者显式执行update但没有提交时,都会锁住了此条记录,此时另外的线程并不能更新此条记录。
* #3 new一个Bean,是游离的实体,不论Session中有没有相同ID的Bean; 因此如果更新数据库,这个游离的Bean并不会收到影响。
*/
程序就不贴上来了。仔细体会,最好自己测试。
更多的细节,可以看看 前辈 的博客 http://blog.csdn.net/javacoffe/default.aspx?PageNumber=4
- Hibernate的Session的一点记录
- Hibernate 中session的一点说明
- 关于cookies和session的一点记录
- 对Hibernate中Session与Thread绑定的一点认识
- Session的一点体会
- Session的一点理解
- hibernate的一点总结
- Hibernate的一点经验
- hibernate的一点总结
- 重装系统的一点记录
- kvo 的一点记录
- shiro的一点记录
- CATransform3D的一点记录
- INSTR的一点记录
- css 的一点记录
- 一点幼稚的记录
- 关于Session的一点认识
- 有关Session的一点总结
- 不启动Word查看文档字数统计的方法
- Android高手进阶教程(二十一)之---Android中创建与几种解析xml的方法!
- CBO-模板生成器
- C++获取当前进程的进程号方法
- anti-CSRF Token布署时需要注意的一点问题
- Hibernate的Session的一点记录
- btrace 性能跟踪
- Java中的instanceof关键字
- 应用程序基础及组件
- 什么是BETA,RC,ALPHA版
- 新手站长必须要了解的24个网站统计分析名词
- Inconsistent accessibility: field type '...' is less accessible than field '...'
- Android高手进阶教程(二十二)之---Android中几种图像特效处理的集锦!
- 网站项目模型及业务流程分析