hibernate区分瞬时实例和分离实例
来源:互联网 发布:mac格式化u盘方案选择 编辑:程序博客网 时间:2024/06/05 23:01
由于Hibernate 不保留对分离实例的引用,Hibernate会把一个实例认为是未保存的瞬时实例,如果:
1.标识符属性(如果存在)为null。
2. 版本属性(如果存在)为null。
3.在类的映射文档中支持unsaved-value及标识符属性匹配的值。
4.在类的映射文档中支持unsaved-value及版本属性匹配的值。
5. 支持Hibernate Interceptor 并在代码中检查完实例后从Interceptor.isUnsaved()返回Boolean.TRUE。
在我们的业务模型中,已经到处使用过可空的类型java.lang.Long作为标识符属性类型。由于我们正在使用生成的复合标识符,这就可以解决问题。新的实例有空的标识符属性值,因此Hibernate认为它们是瞬时的。分离的实例有非空的标识符值,Hibernate也会正确的对待它们。
然而,如果在持久类中使用原始的long 类型,就需要在所有的类中使用下面的标识符映
射:
<class name="Category" table="CATEGORY">
<id name="id" unsaved-value="0">
<generator class="native"/>
</id>
....
</class>
unsaved-value属性告诉Hibernate把具有标识符值为0的Category实例当作新初始化的瞬时实例。unsaved-value 属性的默认值为null,因此,由于我们选择Long 为标识符属性类型,
1.标识符属性(如果存在)为null。
2. 版本属性(如果存在)为null。
3.在类的映射文档中支持unsaved-value及标识符属性匹配的值。
4.在类的映射文档中支持unsaved-value及版本属性匹配的值。
5. 支持Hibernate Interceptor 并在代码中检查完实例后从Interceptor.isUnsaved()返回Boolean.TRUE。
在我们的业务模型中,已经到处使用过可空的类型java.lang.Long作为标识符属性类型。由于我们正在使用生成的复合标识符,这就可以解决问题。新的实例有空的标识符属性值,因此Hibernate认为它们是瞬时的。分离的实例有非空的标识符值,Hibernate也会正确的对待它们。
然而,如果在持久类中使用原始的long 类型,就需要在所有的类中使用下面的标识符映
射:
<class name="Category" table="CATEGORY">
<id name="id" unsaved-value="0">
<generator class="native"/>
</id>
....
</class>
unsaved-value属性告诉Hibernate把具有标识符值为0的Category实例当作新初始化的瞬时实例。unsaved-value 属性的默认值为null,因此,由于我们选择Long 为标识符属性类型,
- hibernate区分瞬时实例和分离实例
- Hibernate 三种状态(瞬时,持久,脱管)的区分
- 4.3.4 区分transient和detached实例
- ADF: 区分VO定义和VO实例
- Mysql读写分离实例
- Hibernate原理和第一个Hibernate实例
- iOS 类方法和实例方法的区分和使用
- Hibernate实例
- hibernate实例
- Hibernate实例
- Hibernate实例
- 用实例区分Linux下硬链接和符号链接
- 区分数据库(database)和实例(instance)的概念
- oc基础:区分类方法和实例方法
- 类变量和实例变量的简单区分
- URL和URI的详细区分(带实例)
- 关于类方法和实例方法的定义区分
- iOS的构造方法和实例方法的区分
- .Net 创建用户界面学习笔记
- 喜欢阿甘妈妈的一句话
- 使用SAX处理XML文档 (转贴自--中国xml论坛)
- hibernate的级联----cascade
- linux下开发USB摄像头
- hibernate区分瞬时实例和分离实例
- 《TVS2.0应用实录》001:本系列文章正式开始!
- 夜深人静之时......
- 《TVS2.0应用实录》003:需求获取和需求建模
- 一些故事让我们流眼泪( 一 )
- 《as soon as you love me》
- 大象和蚂蚁的故事全集
- vs2005
- 高考之痛(来自Aether的文章)