日期:2014-05-19  浏览次数:20767 次

OpenJPA如何根据实体类自动建表?
如题. 会根据实体定义自动在数据库生成表.

------解决方案--------------------
刚看了一个文章,了解到一种方式,不算太方便,但也算是一种

OpenJPA 中提供了专门的 MappingTool(org.apache.openjpa.jdbc.meta.MappingTool)工具协助开发者保持实体类和数据库表结构之间的一致性。MappingTool 工具能够自动的根据实体类中提供的注释(Annotation),识别出对象、对象之间的继承 / 包含等关系以及如何在关系型数据库中处理这些关系的设置,自动保证实体类和数据库之间的一致性,开发者也可以选择使用 OpenJPA 生成创建数据库所需要的 SQL 语句,然后手动的保持实体类和数据库之间的一致性。

可以使用下面的命令语句直接通过 MappingTool 在数据库中创建 OpenJPA 应用所需要的数据库表。

java org.apache.openjpa.jdbc.meta.MappingTool Animal.java


命令执行完成后,我们通过 MySQL 的客户端访问 OpenJPA 数据库,可以发现里面已经创建了名为“animal”的数据表。如果开发者不想让 MappingTool 自动维护 OpenJPA 和数据库之间的映射,而只是想让 MappingTool 协助生成创建数据库所需要的数据库表定义文件(DDL),可以使用下面的命令语句,其中的参数 -sql 的值就是生成数据库表定义文件的位置。

比如要将生成的数据库表定义文件写入当前文件夹下 animal.sql 文件的命令如下:

java org.apache.openjpa.jdbc.meta.MappingTool – sql animal.sql Animal.java


[ 注 ] 要成功执行 MapptingTool 工具,必须先将数据库的 JDBC 驱动放入到 classpath 中,否则会得到一个 org.apache.openjpa.util.StoreException 类型的异常信息。
文章出处:http://www.ibm.com/developerworks/cn/java/j-lo-openjpa2/
------解决方案--------------------
终于有了点突破,应该可以轻松些了。
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
在运行时会自动创建表,它也是通过java org.apache.openjpa.jdbc.meta.MappingTool 来处理的。
你可以看看官方的文档,内容出处:http://openjpa.apache.org/builds/1.1.0/docs/ref_guide_mapping.html#ref_guide_mapping_mappingtool_examples
在最后几行