最近正在做JDO 2.0与Hibernate的方案选择。JDO实现选的是Jpox,个别问题也参看了Bea Kodo 4.1。但是今天发现JDO2.0在一项关键功能上无法满足要求,有可能被直接叫停。
这个功能就是动态O/R Mapping。就是说,在系统运行时,动态生成一份新的O/R Mapping,或者往原来的O/R Mapping中添加字段。并且这些改动,应当无须重启Application Server就能生效。
Hibernate虽然也没有很好的支持这一点,但是提供了可实现的渠道。
1. 重建SessionFactory时可以添加新的Mapping文件。
2. Dynamic Component可以在pojo中将动态字段表达为Map,这样只用修改Mapping文件,不用修改java类。
3. Hibernate 3.2.1还提供不用java类的Mapping方式。在Mapping文件中,只指定entity-name,不指定class,Hiberante就会使用Map来表达它。
Jpox没有提供上面三种渠道中的任何一种。我已经在Jpox forum上发贴问了,不知道什么时候能有答复。
Kodo的文档中也没有直接提到,本想去bea发贴的,但是网速太慢。