Glassfish v3使用EclipseLink作为默认的JPA 2.0参考实现。实际使用中,可以利用EclipseLink的属性来完成一些有趣的功能。
在JPA的Persistence Unit配置文件persistence.xml里,可以通过Property元素来指定一些每个JPA实现特有的属性。对于EclipseLink而言,可以通过设置属性完成诸如自动更新schema,或者生成Entity的DDL脚本的功能。
自动更新Schema
以Eclipse开发EJB3 为例,如果把TennisEJB项目下的persistence.xml改成:
那么就能在每次把EJB部署到Glassfish上时,把Persistence Unit中所有Entity的改动同步更新至数据库的schema。这个过程(包括生成DDL脚本,并且在数据库执行生成的脚本)都是由Glassfish自动完成。
这样就不用在改完Entity后,手工去更新数据库的schema了。
生成DDL脚本
如果使用如下的persistence.xml
每次部署EJB时,Glassfish会在eclipselink.application-location指定的位置,生成名为eclipselink.create-ddl-jdbc-file-name和eclipselink.drop-ddl-jdbc-file-name的DDL脚本。
这样可以检查Glassfish更新schema使用的DDL语句。
这里我把eclipselink.ddl-generation.output-mode设为both,照道理Glassfish应该先在指定位置生成DDL脚本,然后在数据库执行DDL语句。很奇怪的是,Glassfish只是生成了DDL脚本,而并没有更新schema,不知道这是为啥。
Tips:
如果eclipselink属性不起作用,可以试着把eclipse中的servers标签页里的glassfish server删掉,再重新建一个新的glassfish server。
参考
Using EclipseLink JPA Extensions for Schema Generation