Hibernate的继承特性:优雅背后的小陷进

Hibernate有很多特性,这里不多说,只说几个和本次内容相关的特性。

1、同一Session中的同一实例确保只加载一次
具体来说就是在同一个Session中,调用多次session.get(id, Class) / session.load(id, Class),都只发生一次实际的数据库操作(即第一次调用时访问数据库,后续的访问直接从session的缓存中返回了)。这个特性在多个Service/多个方法的时候尤其便捷,可以不用考虑直接调用get或load方法获取数据,而不用担心是否会对数据库造成性能影响。

2、对不需要的实例使用代理延迟加载
Hibernate 3中,对于@ManyToOne,如果没有手动设置@ManyToOne(fetch=FetchType.LAZY),则每次都会自动加载这个One,如果手动配置了,则只是产生一个代理对象(可认为是占位符)。

3、继承机制自动实例化相应的具体子类实例
继承机制在Hibernate中有N种(N>3)配置方式,但不论是哪种配置方式,在进行get / load (id, Class)时,都能够自动返回相应的具体子类实例,相当的智能

以上3个特性都是非常好的也是大家所熟知的,但当这三者结合在一起在某个特殊的情况下,可能会出现你不希望的情况。

先描述一下我所说的特殊情况:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值