沉重的负担-Hibernate的反模式
AbstractEntityPersister persister =(AbstractEntityPersister) classMetaDatas.get(entityName); String tableName = persister.getTableName();
参考:
解决Hibernate SQL Query Cache的一个可靠性问题(附源码)
6 楼 starfeng 2008-11-25 1. 关于模块化问师, 现在已不成为问题.
引入属性hibernate.archive.autodetection即可.
2. 关于延迟加载, 这的确是一个问题.
做JUnit test时, 很浪费时间. 我想应有相应的改进方法.
3. 关于两套DOM模型, 这是合理的
你要更详细的xml里的信息, 可以从Configuration中取得, 运行时期, configuration对象被丢弃其实不完全是hibernate本身的错, 只不过是spring或ejb之类的容器没有提供这个configuration对象的引用.
ClassMetaData提供运行时间的对象信息, 和xml中的不完全相同, 这里可以获得运行期的sql,对象约束,关系等.
所以, 这两套模型都是有必要的, 针对不同用途.
附:
关于configuration对象的获取, 在03年,纯hibernate的时代,我们会new Configuration(),所以很易保存这一对象用于数据分析. spring引入后, 我们不会涉及这一块的处理, 可以如下方式取得:
1) 普通的hibernate方式, 让spring自动注入, 可以你的类中加入:
@Resource
private LocalSessionFactoryBean sessionFactoryBean;
然后用:sessionFactoryBean.getConfiguration()
2) JPA方式(或者说按EJB规范创建), 这个麻烦点, 如果没有jdni支持, 无法获得这一configuration, 需重载spring的HibernateJpaVendorAdapter,或者, 用Ejb3Configuration重新构建一个.
4. 关于动态加载和持久化
这个是一个成为一个专题了, 网上有不少第三方解决方案, 但都不是很完美, 我也奇怪为什么gavin king不在hibernate本身加强这一方面的处理. 难道他反对(或者不看好)动态OO? 事实上, 不少应用有这方面的需求. 7 楼 kjj 2009-01-11 引用
采用20多个库,每个库table很多有200多个,20个Configuration启动后占用了600M内存
20 个库 * 200 表 = 2000+表就算全部写在文件里,然后读到内存里,竟然占了600M的内存??,可以说说怎么算出来的吗 8 楼 阳光晒晒 2009-01-12 送你四个字:
单元测试. 9 楼 timshaw9791 2009-07-10 EXvision 写道建议楼主认真学习hibernate。
对于第四点,在生产环境下,貌似这个完全用不上。
再说了新建了hbm.xml,还有相应的DAO、Service需要写,不重启服务就见鬼了。
每次都去搜寻一次更改效率更低吧。
我倒是期望能有一个按需加载的特性,金蝶自己搞的ORM里就有这个一个东西,比如说这次我load一个东西的时候和hbm里面定义的延迟加载有所不同,在加载A的时候需要同时将A.b也加载出来。不过初步意向这个东西可以通过封装一个HQL查询来实现。
另外,HQL不支持union等常见集合操作很郁闷,牛人总是抛出一句话,可以用sql来解决。。。
有人也提了好久了,到现在都没个说法,JIRA地址:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1050 10 楼 starffly 2009-07-28 kjj 写道引用
采用20多个库,每个库table很多有200多个,20个Configuration启动后占用了600M内存
20 个库 * 200 表 = 2000+表就算全部写在文件里,然后读到内存里,竟然占了600M的内存??,可以说说怎么算出来的吗
20*200=2000....
11 楼 eastone 2009-07-28 我比较赞同我们一个老同事的观点:简单、直接。
框架可以借鉴,绝不使用。 12 楼 magus 2009-07-28 简单MIS项目可以使用hibernate,但表格多的时候带来的内存开销很大。。在最早的项目中使用过hibernate,后来就没有用了。现在做的自己写的一个通用的范型DAO,使用JDBC实现,同时也支持hibernate实现、支持多个数据库。可支持配置文件,如果没有配置文件也是可以的,简洁方便。目前在使用中逐步完善功能,等功能比较完备之后在和大家分享