2011-05-13 154 views
14

我使用JPA 2.0注释创建了我的模型类。在运行时,我将使用EclipseLink 2.2.0,但我一直在使用纯模型类中的纯JPA批注。使用EclipseLink为JPA 2.0生成DDL

现在,我该如何生成数据库的模式DDL?

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

我也解决了一个Ant任务或Maven的一些插件。

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

回答

6

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

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

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

它将为您提供控制,以确定您是要仅生成脚本还是实际执行针对数据库的DDL。

我希望有帮助!

+6

-1因为虽然这些配置很明确,但它们并不能解决在启动完整应用程序之前的某个时间点生成模式的实际问题。 – 2013-05-10 21:44:12

1

我知道这有点晚了,但我一直在努力解决同样的问题。我发现的是在完成像设置“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(); 
    } 
}