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

来源:互联网 发布:淘宝好友在哪里看 编辑:程序博客网 时间:2024/05/18 02:05
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是全局共享的。




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

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


0 0
原创粉丝点击