DataNucleus是一个Java持久层框架,它实现了JPA和JDO两套标准,可以分别按照JPA和JDO两种方式书写与实现无关的代码。DataNucleus的前身是JPOX,一个JDO的实现。DataNucleus和OpenJPA一样,是JPA的实现,这与Hibernate不同,Hibernate的EntityManager仅仅是一个wrapper(虽然这个wrapper看起来似乎更好用)。
我之所以关注DataNucleus,是因为DataNucleus框架支持OpenGIS的Simple Feature Access标准,可以直接存取MySQL、PostGIS和Oracle上的几何数据类型到JTS的Geometry对象中,从而实现了空间数据的ORM(插一句,数据库都有几何类型的数据了,而Java还没有,也正常;JTS已经成了Java GIS的事实标准,如果有一天能成为JSR,变成标准的API,那就好了)。在这方面来说,DataNecleus相对Hibernate算是领先的。目前我还没有看到Hibernate映射数据库几何数据类型的插件。由于MySQL不支持SRID,所以在MySQL上实现映射几何数据只需要单纯的用WKT转换就可以了,而在PostGIS上可能会稍微复杂一些,我没有仔细研究过,不好说。
Winter用到了JTS的几何对象,由于Hibernate没有良好的支持,我们在持久层用了iBatis框架,以方便手写SQL。但是大量的iBatis SQL Map文件和SQL语句维护起来比较麻烦,如果遇到修改数据表结构要做的事情就更多,所以我还是希望Winter2008中可以用一个ORM框架代替iBatis以方便后续开发,现在看起来DataNucleus是一个备选方案。
除了传统的关系型数据库,DataNucleus还支持XML、Excel、DB4O等更种各样的持久层解决方案,可以做到有效的隔离。
遗憾的是,和OpenJPA一样,DataNucleus一样需要对实体类的class手动Enhance,如果没有IDE的插件支持,这个过程是极其繁琐的。我暂时还不清楚为什么持久层框架都要在字节码级别做文章,希望今后这种状况能有所改善吧。

