Генерировать 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();
  }
}