2011-05-13 69 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(); 
    } 
}