hibernate区分瞬时实例和分离实例
2005-06-15 18:02
190 查看
由于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 三种状态(瞬时,持久,脱管)的区分
- 第13章 Hibernate概述及实例分析
- Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用
- Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用
- hibernate简单多对一实例
- 第三节:springmvc+hibernate+spring整合实例
- Hibernate入门实例——条件查询(Criteria queries)
- spring中的hibernate开发---实例讲解
- Struts Spring Hibernate (SSH) 整合实例
- 如何区分Oracle的数据库,实例,服务名,SID
- Hibernate一对多双向注解配置实例
- Hibernate 数据库操作实例
- 玩转Hibernate(二)实例解析
- Android应用实例之---使用Linkify + 正则式区分微博文本链接及跳转处理
- Hibernate基于主键一对一映射操作实例
- hibernate持久化数据实例解析
- hibernate4 二级缓存demo实例
- Hibernate_HQL实例
- Hibernate_3_客户实例_数据库中自动生成主从表
- 史上最简单的struts+spring+hibernate配置实例