【问题标题】:Generate DDL for JPA 2.0 with EclipseLink使用 EclipseLink 为 JPA 2.0 生成 DDL
【发布时间】:2011-08-24 22:09:26
【问题描述】:

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

现在,如何为数据库生成模式 DDL?

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

我也会满足于 Ant 任务或一些 Maven 插件。

另外,我选择将我的文件命名为 jpa.xml 而不是 persistence.xml;如果您的解决方案也考虑到这一点,则可以加分。否则,我将重命名我的文件 persistence.xml。

【问题讨论】:

    标签: jpa eclipselink ddl


    【解决方案1】:

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

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

    您会在此处找到一个名为 eclipselink.ddl-generation.output-mode 的附加属性,其文档位于同一页面中。

    它可以让您控制是否只想生成脚本或实际对数据库执行 DDL。

    希望对你有帮助!

    【讨论】:

    • -1 因为虽然这些配置很清楚,但它们并不能解决在启动完整应用程序之前的某个时间点生成架构的实际问题。
    【解决方案2】:

    我知道这有点晚了,但我一直在努力解决同样的问题。我发现在进行诸如设置“eclipselink.ddl-generation”之类的配置之后,我将以下代码挂钩到我们的构建中,我得到了要生成的 ddl 文件。 EntityManagerHolder 类必须在您的 context.xml 中定义。这有点骇人听闻,但很有效。

    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();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 2011-07-23
      • 1970-01-01
      相关资源
      最近更新 更多