Hibernate 如何操纵持久化对象


操纵持久化对象

 

1.   理解Session的缓存:
在Java里面,缓存通常是指Java对象的属性占用的内存空间(实质),通常是一些集合类型的属性(Hashmap、Set、List)。在session接口的实现类SessionImpl中定义了一系列的Java集合,这些Java集合就构成了Session的缓存。
当Session的save()方法持久化一个对象时,这个对象被加入到Session的缓存中,以后即使应用程序中的引用变量不再引用这个对象,只要Session的缓存还没有被清空,这个对象仍然处于生命周期中。当Session的load()方法加载一个对象时,Session会先判断缓存中是否已经存在这个对象了,如果存在,就不需要再到数据库中重新加载了。
Session的缓存有两大作用:
1.1.       减少访问数据库的频率。
1.2.       保证缓存中的对象与数据库中的相关记录保持同步。
Session有两个方法:一个commit()事务提交方法,还有flush()刷新缓存方法,都有着清理缓存的作用。flush()进行缓存的清理,执行一系列的SQL语句,但不会提交事务。而commit()方法会先调用flush()方法,然后在提交事务。
2.   定义持久化类的建议:
在应用程序中,用来实现业务问题实体的(如,在电子商务应用程序中的Customer和Order) 类就是持久化类。如果这些持久化类遵循一些简单的规则,Hibernate能够工作得更好,这些规则也被称作简单传统Java对象(POJO:Plain Old Java Object)编程模型。但是这些规则并不是必需的。最好要遵循以下几条主要的规则:
1)     实现一个默认的(即无参数的)构造方法(constructor):
我们强烈建议,在Hibernate中,为了运行期代理的生成,构造方法至少是 包(package)内可见的。
2)     提供一个标识属性(identifier property):
我们建议你对持久化类声明命名一致的标识属性。我们还建议你使用一个可以为空(也就是说,不是原始类型)的类型。
3)     使用非final的类:
代理(proxies)是Hibernate的一个重要的功能,它依赖的条件是,持久 化类或者是非final的,或者是实现了一个所有方法都声明为public的接口。你也应该避免在非final类中声明 public final的方法。
4)     为持久化字段声明访问器(accessors):
5)     如果你有如下需求,你必须重载 equals() 和 hashCode()方法:
l 想把持久类的实例放入Set中(当表示多值关联时,推荐这么做)
l 想重用脱管实例
Hibernate保证,仅在特定会话范围内,持久化标识(数据库的行)和Java标识是等价的。因此,一旦 我们混合了从不同会话中获取的实例,如果希望Set有明确的语义,就必须实现equals() 和hashCode()。


注意:在实际应用程序中,应该避免一个Java对象同时被多个Session实例关联,因为这会导致重复执行SQL语句,并且极容易出现一些并发问题。

持久化对象的特征。


部分文字转自:http://blog.csdn.net/yyywyr/article/details/6645040

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值