使用EclipseLink为JPA 2.0生成DDL

时间:2011-05-13 12:44:20

标签: jpa eclipselink ddl

我用JPA 2.0注释创建了我的模型类。在运行时,我将使用EclipseLink 2.2.0,但我一直小心在模型类中仅使用纯JPA注释。

现在,如何为数据库生成架构DDL?

我想使用EclipseLink API从类生成DDL,但不是在运行时生成。相反,我希望Java类在命令行上运行并输出DDL。什么this guy did for Hibernate,我想要EclipseLink。

我也会为Maven安排一个Ant任务或一些插件。

另外,我选择将文件命名为 jpa.xml 而不是 persistence.xml ;如果你的解决方案也能解决这个问题。否则,我只是重命名我的文件persistence.xml。

2 个答案:

答案 0 :(得分:6)

您可以在EclipseLink文档中找到答案,更具体地说,可以在Using EclipseLink JPA Extensions for Schema Generation部分找到答案。

在那里,您会发现有一个名为eclipselink.ddl-generation的属性,其值可能为NONE | CREATE_ONLY | DROP_AND_CREATE

在那里你会找到一个名为eclipselink.ddl-generation.output-mode的附加属性,其文档在同一页面中。

它将控制您是否只想生成脚本或实际执行数据库的DDL。

我希望有所帮助!

答案 1 :(得分:1)

我知道这有点晚了,但我一直在努力解决同样的问题。我发现在完成设置“eclipselink.ddl-generation”之类的配置之后,我将以下代码挂钩到我的构建中,我得到了生成的ddl文件。必须在context.xml中定义EntityManagerHolder类。它有点神圣但有效。

public class EntityManagerHolder {
  @PersistenceContext(type = PersistenceContextType.TRANSACTION)
  private EntityManager entityManager;
  protected EntityManager getEntityManager() {
    return entityManager;
  }
}

public class SQLGeneration {
  public static void generateSQLFiles() {
ClassPathXmlApplicationContext application_context = new ClassPathXmlApplicationContext(
    "META-INF" + File.separator + "spring" + File.separator
        + "context.xml");
EntityManagerHolder entity_manager_holder = (EntityManagerHolder) application_context
    .getBean("entityManagerHolder");
entity_manager_holder.getEntityManager().getEntityManagerFactory()
    .createEntityManager();
  }
}