关于Hibernate的几点回顾:get/load/SessionFactory/延迟加载

1,Hibernate中get()方法和load()方法的相同点与不同点?
    如果在缓存中没有找到对象,get()方法会直接访问数据库,并返回一个完全初始化
好的对象。load()方法如果在缓存中没有找到对象,则会返回一个代理对象,只有在对象
getId()之外的其他方法被调用时才会真正去访问数据库,这在某些场景下可以显著提升
查询性能。
    一句话概括就是:get()方法是“立即加载”,load()方法是“延迟加载”。

2,Hibernate的延迟加载是如何实现的?
    Hibernate的延迟加载,使用的是CGLIB的动态代理机制,也就是基于Class的动态代
理机制(区别于基于接口的动态代理机制)。Hibernate在使用到一个对象的时候,才会
去动态加载这个对象,这个机制和Spring加载bean的机制如出一辙。关于基于JDK的动态
代理和CGLIB的动态代理的区别, 可以参考我的之前的一篇博文:
《Java代理模式详解及案例分析:静态代理/动态代理》
http://blog.csdn.net/reggergdsg/article/details/53024827

3,Hibernate中的SessionFactory是线程安全的吗?
    SessionFactory是线程安全的。SessionFactory是全局的。如果一个应用只使用了一
种数据库,那么这个应用就只有一个SessionFactory。SessionFactory是全局共享的。




《积雨辋川庄作·王维》
积雨空林烟火迟,蒸藜炊黍饷东菑。
漠漠水田飞白鹭,阴阴夏木啭黄鹂。
山中习静观朝槿,松下清斋折露葵。

野老与人争度罢,海鸥何事更相疑。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值