Hibernate (四)基本特性

一、对象持久性

在Hibernate使用过程中,实体对象可以具有以下三种状态:
1)临时状态:采用new关键字创建的对象,该对象未与Session发生关联(未调用Session的API)。也叫临时对象。临时状态的对象会被Java的垃圾回收机制回收。
2)持久状态:实体对象与Session发生关联(调用了Session的get、load、save、update等API)。也叫持久对象。
3)游离状态:原来是持久状态,后来脱离了Session的管理。如:Session被关闭,对象将从持久状态变为游离状态,同时垃圾回收机制可以回收掉,不再占用缓存空间了。

二、处于持久状态的对象具有的特点

1)对象生命期持久,垃圾回收机制不能回收。
2)对象的数据可以与数据库同步(即对象中的数据发生改变,则数据库中的数据自动同步)。由Session对象负责管理和同步。
3)对象在Session的一级缓存中存放(或者说在Session缓存中的对象都是持久对象)。

注意事项:Session.close();有两个作用:①关闭连接、释放资源②使对象变为游离状态,当对象的引用不存在时,对象才被回收。没被回收时,对象中的数据还在!

三、三种状态下的对象的转换


当持久对象数据改变后,调用session.flush()方法,会与数据库同步更新。

commit()方法,内部也调用了flush()方法,因此使用commit()方法可以省略flush()方法的调用。

四、一级缓存机制(默认开启)

    一级缓存被称为Session级别的缓存:每个Session都有自己独立的缓存区,该缓存区随着Session创建而开辟(由SessionFactory创建),随着Session.close()而释放。
该缓存区可以存储当前Session关联的持久对象。只有在缓存区中,Session才管该对象。

    一级缓存的好处:

    Hibernate在查询时,先去缓存当中查找,如果缓存中没有,才去数据库查询。如果利用Session对同一个对象查询多次,第一次去数据库查,后续的会从缓存查询,从而减少了与数据库的交互次数。

    一级缓存的管理方法

    1)session.evict()方法:将对象清除。
    2)session.clear()方法:清除所有对象。
    3)session.close()方法:清除所有对象,并关闭与数据库的连接。

五、延迟加载机制

    Hibernate在使用时,有些API操作是具有延迟加载机制的。延迟加载机制的特点:当通过Hibernate的API获取一个对象结果后,该对象并没有数据库数据。当通过对象的getter方法获取属性值时,才去数据库查询加载。

延迟加载机制的操作:

1)session.load();//延迟加载查询,session.get();是立即加载查询
2)query.iterator();//查询
3)获取关联对象的属性信息

注意事项:这些方法返回的对象,只有id属性(主键)有值,其他属性数据在使用的时候(调用getXXX()方法时,除主键外,调主键get方法不会发SQL)才去获取。

    在使用延迟加载操作后,Hibernate返回的对象是Hibernate利用CGLIB技术(cglib.jar)新生成的一个类型(动态的在内存中生成)。在新类型中,将属性的getter方法重写。新生成的类是原实体类的子类(继承关系)。

延迟加载的好处:

1)提高了内存的使用效率。                

2)可以使数据访问降低并发量。

六、Session的get和load方法的区别

1)相同点:两者都是按“主键”做条件查询。
2)不同点:

①get是立刻加载;load是延迟加载。
②get返回的对象类型是实体类型;load返回的是动态生成的一个代理类(动态代理技术),该代理类是实体类的子类。
③get未查到数据返回null;load未查到数据抛出ObjectNotFoundException异常。
注意事项:若实体类用了final修饰,则破坏了延迟加载机制,那么load效果与get就完全相同了。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值