Генерировать DDL для JPA 2.0 с EclipseLink
Я создал классы моделей с аннотациями JPA 2.0. Во время выполнения я буду использовать EclipseLink 2.2.0, но я старался использовать только чистые аннотации JPA в своих классах моделей.
Теперь, как мне создать DDL схемы для базы данных?
Я хочу использовать API EclipseLink для генерации DDL из классов, но не во время выполнения. Вместо этого я хочу, чтобы класс Java запускался в командной строке и выводит DDL. Что этот парень сделал для Hibernate, я хочу для EclipseLink.
Я также соглашаюсь на задачу Ant или некоторый плагин для Maven.
Кроме того, я решил назвать свой файл jpa.xml вместо persistence.xml; бонусные баллы, если ваше решение также учитывает это. В противном случае я просто переименую файл persistence.xml.
Ответы
Ответ 1
Вы можете найти свои ответы в документации EclipseLink, более конкретно в разделе Использование расширений EclipseLink JPA для генерации схемы.
Там вы увидите, что есть свойство с именем eclipselink.ddl-generation
с возможными значениями, например NONE | CREATE_ONLY | DROP_AND_CREATE
.
Здесь вы найдете дополнительное свойство с именем eclipselink.ddl-generation.output-mode
, документация которого находится на этой же странице.
Он предоставит вам контроль над тем, хотите ли вы просто создать script или фактически выполнить DDL для базы данных.
Я надеюсь, что это поможет!
Ответ 2
Я знаю, что это немного поздно, но я боролся с той же проблемой. То, что я нашел, было после выполнения таких конфигураций, как установка "eclipselink.ddl-generation", а затем я подключил следующий код к нашей сборке. Я получил файл ddl для генерации. Класс EntityManagerHolder должен быть определен в вашем контексте. 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();
}
}