关于一些O-R Mapping的实现

时间:2021-04-01 16:37:35

关于一些O-R Mapping的实现

最近连续试用了两个O-R Mapping,一个是Hibernate 3,一个是国内的JDO实现Liberator。

Hibernate 3在两层一对多关系时,似乎会性能很差,例如:

Voucher
| 1
|
| 0..*
VoucherEntry
| 1
|
| 0..*
Assist

在ERP系统,可能会有接近10的单据时多层一对多关系的,Hibernate在这方面似乎存在1 + N的问题,而我们在这方面有较好的优化策略。看来,Hibernate的作者尚未总结出一种较好的处理多层一对多关系的算法。

我还没很细致研究Liberator,因为Liberator没有提供源码,通过反编译的方式,不方便调试。而且经过JDO Enhancer的值对象也是不可以调试的,这一点,JDO的局限就显示出来了。JDO不能直接和Eclipse集成使用,而且不能够调试值对象。

Liberator似乎不是很稳定,例如:

 

关于一些O-R Mapping的实现final PersistenceManagerFactory pmf  =  JDOHelper.getPersistenceManagerFactory(p);
关于一些O-R Mapping的实现
关于一些O-R Mapping的实现
//  Obtains a PersistenceManager
关于一些O-R Mapping的实现
final PersistenceManager pm  =  pmf.getPersistenceManager();
关于一些O-R Mapping的实现
关于一些O-R Mapping的实现
//  Construct an Account
关于一些O-R Mapping的实现
final Account account  =   new  Account( " foo " " fooLast " " fooPassword " " foo@redsoftfactory.com " );
关于一些O-R Mapping的实现pm.currentTransaction().begin();
关于一些O-R Mapping的实现pm.makePersistent(account);
关于一些O-R Mapping的实现pm.flush();
关于一些O-R Mapping的实现account.setPassword(
" fooPassword " );
关于一些O-R Mapping的实现pm.makePersistent(account); 
// 这样修改似乎无效
关于一些O-R Mapping的实现
pm.flush();
关于一些O-R Mapping的实现pm.currentTransaction().commit();
关于一些O-R Mapping的实现

 

不知道是我理解错误,还是Liberator的BUG。