首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于Session.getIdentifier(Object entity)的议论

2012-10-30 
关于Session.getIdentifier(Object entity)的讨论在重读Hibernate时,在4.2.2一节发现这么一段话:Hibernate

关于Session.getIdentifier(Object entity)的讨论
在重读Hibernate时,在4.2.2一节发现这么一段话:
  Hibernate exposes database identity to the application in two ways(Hibernate的API提供了两种方法来获得数据库ID):
    ■ The value of the identifier property of a persistent instance (通过处于持久太对象的getId方法)
    ■ The value returned by Session.getIdentifier(Object entity) (调用Session.getIdentifier(Object entity)方法)

前面两句话理解上没有任何问题, 最后一句有些疑问:这个方法有什么实际意义?当得到一个Model类后不也就自然而然地以getId方式获得它的ID,为什么还要绕一下呢?这里面有什么玄机?

  看Session实现类SessionImpl对getIdentifier方法实现的源码,也没发现什么特殊之处。

  大家说说看这个方法ession.getIdentifier(Object entity)有什么特殊意义?Hibernate为什么加这么个方法呢?实际中怎么用?

看源码就知道了,如果对象是HibernateProxy就是用延迟加载
优点是当对象是HibernateProxy的时候可以延迟加载其他属性提高性能(如果其他属性是非必要的)
而且不需要知道持久化对象的标识字段的名称
缺点当然就是不如属性获取来得直观 6 楼 lgdlgd 2009-09-20   批量操作时,如果要使用JDBC操作插入,但ID不是数据库生成的,那么可使用此方法或得ID,再使用JDBC插入,我的应用用的是UUID,就是这样取得新记录ID的。

热点排行