Генерация DDL для JPA 2.0 с EclipseLink - PullRequest
14 голосов
/ 13 мая 2011

Я создал свои классы моделей с аннотациями JPA 2.0. Во время выполнения я буду использовать EclipseLink 2.2.0, но я старался использовать только чистые аннотации JPA в моих модельных классах.

Теперь, как мне сгенерировать DDL схемы для базы данных?

Я хочу использовать API EclipseLink для генерации DDL из классов, но не во время выполнения. Вместо этого я хочу, чтобы класс Java запускался из командной строки и выводил DDL. Что этот парень сделал для Hibernate , я хочу для EclipseLink.

Я бы тоже согласился на задачу Ant или какой-нибудь плагин для Maven.

Кроме того, я решил назвать свой файл jpa.xml вместо persistence.xml ; бонусные баллы, если ваше решение также учитывает это. В противном случае я просто переименую свой файл persistence.xml.

Ответы [ 2 ]

6 голосов
/ 13 мая 2011

Вы можете найти свои ответы в документации EclipseLink, более конкретно в разделе Использование расширений EclipseLink JPA для генерации схемы .

Там вы найдете свойство, называемое eclipselink.ddl-generation с возможными значениями, такими как NONE | CREATE_ONLY | DROP_AND_CREATE.

Там вы найдете дополнительное свойство с именем eclipselink.ddl-generation.output-mode, документация которого находится на этой же странице.

Он предоставит вам контроль над тем,хочу просто сгенерировать скрипт или фактически выполнить DDL для базы данных.

Надеюсь, это поможет!

1 голос
/ 28 декабря 2011

Я знаю, что это немного поздно, но я боролся с той же проблемой.Я обнаружил, что после выполнения настроек, таких как установка 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();
  }
}
...