我用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。
答案 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();
}
}