Hibernate缓存性能监听 | Hibernate缓存

本文探讨了Hibernate中不同类型的集合映射机制及其对性能的影响。详细对比了list、map、IdBag、set等集合类型的特点,并分析了它们在更新操作时的表现。特别指出Set在某些场景下效率较低,并推荐使用inverse设为true的一对多关联中的Bag类型。
Hibernate缓存性能监听 | Hibernate缓存
2011年09月01日
  所有的索引集合list,array,map都有一个主键包含key和index列,主键可以很容易的被索引,更新删除时也可以很快定位,因此这种集合通常是最有效的。
  Set集合有一个主键包含key列和element列,对某些情况,这种集合是低效的,特别是组合元素或者大文本字段,因为数据库可能不能有效索引比较复杂的主键。
  IdBag通常是最有效的。
  Bag通常是最坏的选择,因为允许重复值,没有索引列,没有主键可以定义,Hibernate没有办法区别重复行,只有通过完全删除和完全重建来响应任何改变,这是相当低效的。
  List/map/Idbag/set针对更新操作是最有效的,包括添加/更新/删除。
  Set应该Hibernate应用中最常用的集合,因为关系数据库模型中set集合语义是最自然的,然而在设计良好的应用程序中,我们看到大部分集合是inverse设置为true的一对多关联,这种情况下, bag通常是最有效的集合,因为添加元素到bag和list不需要执行抓取操作(set则不然),此时执行类似下面的代码将会更快
  Parent p = (Parent) sess.load(Parent.class, id);
  Child c = new Child();
  c.setParent(p);
  p.getChildren().add(c); //no need to fetch the collection!
  sess.flush();
  
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值