Hibernate的十大罪状
来源:互联网 发布:java jsonp跨域 编辑:程序博客网 时间:2024/05/17 02:12
Hibernate确实功能强悍,但在易用性、性能上存在缺陷。如果团队中没有一个精通Hibernate的高手,不适合使用Hibernate。
1. 复杂的实体状态
3种实体状态的设计是种种复杂性问题的根源。在持久化状态下不需要save就自动同步到数据库既无必要又容易造成烦恼。
2. Lazy Load 与 Eager Load
Lazy Load的概念听起来不错,用起来就不那么妙了,也直接导致产生了Open Session In View这种妥协方案。此外,在domain类中定义的FetchType只针对get/load/loadAll有效,对Query是无效的,需要再次定义。
3. Open Session In View
Lazy Load引发的一个有较多副作用的解决方案。
4. 级联
级联是一个很好很OO的概念,但往往增加了复杂度。
5. 批量更新与缓存不一致
Hibernate引入了一级缓存和二级缓存,提供了性能的同时带来了缓存一致性的问题。批量更新或者其他系统对数据库的更新容易造成缓存不一致。
6. 配置繁琐
Hibernate最初只能使用xml进行配置,后来终于引入了Annotation和CoC(约定优于配置)来简化配置,但这种变革并不彻底。Hibernate默认把userName映射userName,但实际开发中,把userName映射为user_name的情况更多些。
7. HQL
HQL是一个类SQL对象查询语言,但正是因为HQL与SQL的相似性,往往容易造成混淆,同时HQL难以调试,本质创建了一种语言,增加学习成本。
8. 太多的查询方案
HQL、QBC、SQL,就不能统一点,简洁点?
9. N+1次查询
10. 性能问题
总之,Hibernate立足于作一个完整的自动化的能够适应各种环境的ORM,因此带来了100%的复杂性。但我们实际需要的只是一个简单的能够以20%时间解决80%问题的框架,具有对象-关系映射,能自动生成SQL,能够让新手尽快工作就足够了,也许ActiveRecord是一个选择。
IBatis我还是比较喜欢用这个,这样我的sql能力就有用武之地,而且,数据库的计算能力也可以使用上,不用什么都堆在应用服务器上,可以让数据库服务器分担一部分计算。
- Hibernate的十大罪状
- Hibernate的十大罪状
- Hibernate的十大罪状
- Hibernate的十大罪状
- Hibernate的十大罪状
- 控诉猪猪的十大罪状!
- 控诉猪猪的十大罪状! (转自kitty的blog)
- CRM的七大罪状
- CRM的七大罪状批注
- 深入Hibernate为什么获得巨大成功的十大真理
- “暗恋”4大罪状与4大对策
- Chrome的诸多"罪状"(不断更新中)
- 专家:8大MySQL数据库罪状不适合企业应用
- React实战-历数一个混乱React项目的罪状
- 滋诅卒妆转篆坠篆佐组撰谆鬃综赘拽罪状
- hibernate的大数据处理
- 优秀员工的十大特征
- 搜索引擎的十大秘密
- 为自己选一个网络硬盘
- 第一次独行
- 保护企业Email 从增强Exchange服务器安全性开始
- 简叙两种常见设计模式
- 使用TimesTen遇到S1000 GetNodeName错误
- Hibernate的十大罪状
- Mutual Exclusion with NON Busy Waiting
- 构造函数
- 强签名的由来和作用
- MVC详解:了解真正所谓的"框架"
- 在 Linux 下备份或刷写 BIOS
- 解决安装Oracle后eclipse启动不了的问题
- 超难的75道逻辑思维题
- 一个民工让人流泪的月账本