Hibernate Session方法小结

[size=medium]hibernate session中的load方法返回的一个POJO的代理对象,只有在访问其field时才进行实际的数据装载(向数据库发出一条select查询),如果该通过getter方法来访问其field值,但是session已经close,将抛出延迟初始化的异常。如果load加载的是一条不存在的数据,在该entity的field访问时,将抛出ObjectNotFoundException的异常。
对于session中的get方法,将会实时返回一个实际的POJO对象,而不是load中返回的代理对象。调用get时将立即发出select查询。对于不存在的数据记录,get将返回一个null值,在调用其方法时将产生NullPointerException。

hibernate session中的update方法用来更新对应的pojo对象到数据库中。update方法可以更新一个detached对象,前提条件是该detached对象必须包含id值,并且该update会更新该pojo对象中所有的值到数据库中(根据hbm文件中的配置)。update方法同时也可以更新一个persistence对象到数据库中,如果pojo对象已经是persistence对象(也就是已经存在于session的cache中),进行更新操作只需设置为对应的field值,甚至不需要调用update方法,在session关闭时会自动同步到数据库中。
hibernate中对于merge操作同样能达到持久化的目的,那么他和update方法有什么区别呢?merge方法在进行更新操作时,会首先判断该pojo对象是否是一个persistence对象,如果不是,那么他会首先根据id发出一条select查询,并将查询出的新对象加入到session的cache中,纳入session的生命周期管理中,然后再根据变化进行update。

对于update一个detached对象将导致的全盘update,就是所有在xml配置中的列都将进行update。可以通过在xml的class元素上设置dynamic-update属性和merge方法来避免所有列的update。merge由于merge方法将自动发出一条select查询来将detached对象纳入session的管理,所有对于大批量的操作可能将产生性能问题。建议使用update query来进行部分列的更新。这种特性在hibernate 3.3中才被加入到hibernate中。[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值