关于hibernate的对象标识总结
来源:互联网 发布:g92螺纹循环编程实例 编辑:程序博客网 时间:2024/06/02 04:37
在我们的web应用中使用hibernate作为持久化层的orm框架时候,难免会遇到在两个不同的session中并发访问同一个持久化状态的对象,但是,一个持久化的实例是不可能在两个session中共享的,因此这种情况下有两种不同的标识语义:
1、数据库的标识:a.id.equals(b.id)
2、jvm的标识:a==b
对于那些关联到特定的session上的对象来说,这两种标识是等价的,这种情况下与数据库标识对应的jvm是由hibernate来保证的。
不过在两个不同的session中访问同一个持久化对象,这个持久化对象的两个实例在jvm来看是不一样的。这种情况下可以使用同步和提交的时候使用自动版本化和乐观锁定方法来解决。
由于在单个线程内,操作单元中的对象识别不需要代价昂贵的锁定和其他的同步,因此它具有最好的伸缩性,只要在单个线程只持有一个session,应用程序就不需要同步任何业务对象。
在session的范围内,可以放心的使用==进行对象的比较,但是在session的范围之外==比较会出现无法预期的结果。例如:如果把两个托管对象实例放进同一个set就可能发生,这两个对象可能拥有一样的数据库标识,但是hibernate无法保证他们的jvm标识一致。所以开发人员必须要覆盖持久化类equals和hashcode方法hashcode
1、数据库的标识:a.id.equals(b.id)
2、jvm的标识:a==b
对于那些关联到特定的session上的对象来说,这两种标识是等价的,这种情况下与数据库标识对应的jvm是由hibernate来保证的。
不过在两个不同的session中访问同一个持久化对象,这个持久化对象的两个实例在jvm来看是不一样的。这种情况下可以使用同步和提交的时候使用自动版本化和乐观锁定方法来解决。
由于在单个线程内,操作单元中的对象识别不需要代价昂贵的锁定和其他的同步,因此它具有最好的伸缩性,只要在单个线程只持有一个session,应用程序就不需要同步任何业务对象。
在session的范围内,可以放心的使用==进行对象的比较,但是在session的范围之外==比较会出现无法预期的结果。例如:如果把两个托管对象实例放进同一个set就可能发生,这两个对象可能拥有一样的数据库标识,但是hibernate无法保证他们的jvm标识一致。所以开发人员必须要覆盖持久化类equals和hashcode方法hashcode
0 0
- 关于hibernate的对象标识总结
- hibernate中对象的身份标识
- 关于hibernate的总结
- hibernate配制文件四(对象标识符号)
- Hibernate 常用的标识生成器
- 关于对象的总结
- 关于hibernate 的小总结
- 关于原理图的一些标识
- 关于Location对象的总结
- 关于面向对象的总结
- 关于hibernate的对象保存问题
- 关于Hibernate对象持久化的问题
- 关于Hibernate创建SessionFactory对象的说明
- 关于Hibernate的对象状态转变描述
- Hibernate中关于对象状态的介绍
- Hibernate的学习总结(Session对象)
- Hibernate的学习总结(Query对象)
- Hibernate的学习总结(Criteria对象)
- 【转载】linux下tar的使用
- centos6.5下安装配置apache2.4.9
- 黑马程序员 面向对象(下) 抽象类与接口
- appt命令使用
- 使用Spinner组件实现语言选项
- 关于hibernate的对象标识总结
- 如何使用选项卡实现界面的切换
- B. Megacity
- Tomcat7 新的数据库连接池Tomcat jdbc pool介绍和配置
- Linux18-FTP服务器的搭建
- [2012山东ACM省赛] The Best Seat in ACM Contest (模拟)
- 【linux】 UBUNTU下eclipse c/c++ 环境的安装
- Extjs 4.2 设置buttontext为中文
- linux下的开源移动图像监测程序--motion编译与配置及ffmpeg