Как создать метамодель JPA 2.0? - PullRequest
87 голосов
/ 14 июня 2010

В духе безопасности типов, связанной с CriteriaQuery JPA 2.0, также имеет API для поддержки метамодели представления сущностей.

Кто-нибудь знает о полностью функциональной реализации этого API (для генерации метамодели в отличие от создания классов метамодели вручную)? Было бы замечательно, если бы кто-то также знал шаги по настройке этого в Eclipse (я полагаю, это так же просто, как настроить процессор аннотаций, но вы никогда не знаете).

EDIT: Просто наткнулся на Hibernate JPA 2 Генератор метамоделей . Но проблема остается, так как я не могу найти никаких ссылок для скачивания банку.

РЕДАКТИРОВАТЬ 2: Прошло некоторое время с тех пор, как я задал этот вопрос, но я решил вернуться и добавить ссылку на проект Hibernate JPA Model Generator на SourceForge

Ответы [ 5 ]

84 голосов
/ 14 июня 2010

Было бы замечательно, если бы кто-то также знал, как настроить его в Eclipse (я полагаю, это так же просто, как настроить процессор аннотаций, но вы никогда не знаете)

Да, это так. Вот реализации и инструкции для различных реализаций JPA 2.0:

EclipseLink

Hibernate

OpenJPA

DataNucleus


Последняя версия Hibernate доступна по адресу:

Более старая реализация Hibernate находится по адресу:

40 голосов
/ 28 июня 2012

ПЕРЕСМОТРЕН (март / 2014)

Пожалуйста, посмотрите на jpa-metamodels-with-maven

Hibernate

Рекомендуется использовать Hibernate.

( Я не оцениваю какие-либо функции / функции / возможности использования / стабилизации в этих реализациях. А приведенное выше утверждение сфокусировано только на использовании maven, которое я создал. )

<plugin>
  <groupId>org.bsc.maven</groupId>
  <artifactId>maven-processor-plugin</artifactId>
  <executions>
    <execution>
      <id>process</id>
      <goals>
        <goal>process</goal>
      </goals>
      <phase>generate-sources</phase>
      <configuration>
        <processors>
          <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
        </processors>
      </configuration>
    </execution>
  </executions>
  <dependencies>
    <dependency>        
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-jpamodelgen</artifactId>
      <version>4.3.4.Final</version>
    </dependency>
  </dependencies>
</plugin>

OpenJPA

Для OpenJPA требуется дополнительный элемент <openjpa.metamodel>true<openjpa.metamodel>.

<plugin>
  <groupId>org.bsc.maven</groupId>
  <artifactId>maven-processor-plugin</artifactId>
  <executions>
    <execution>
      <id>process</id>
      <goals>
        <goal>process</goal>
      </goals>
      <phase>generate-sources</phase>
      <configuration>
        <processors>
            <processor>org.apache.openjpa.persistence.meta.AnnotationProcessor6</processor>
        </processors>
        <optionMap>
          <openjpa.metamodel>true</openjpa.metamodel>
        </optionMap>
      </configuration>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>org.apache.openjpa</groupId>
      <artifactId>openjpa</artifactId>
      <version>2.3.0</version>
    </dependency>
  </dependencies>
</plugin>

EclipseLink

EclipseLink требует persistence.xml.

<plugin>
  <groupId>org.bsc.maven</groupId>
  <artifactId>maven-processor-plugin</artifactId>
  <executions>
    <execution>
      <id>process</id>
      <goals>
        <goal>process</goal>
      </goals>
      <phase>generate-sources</phase>
      <configuration>
        <processors>
          <processor>org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor</processor>
        </processors>
      </configuration>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>org.eclipse.persistence</groupId>
      <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
      <version>2.5.1</version>
    </dependency>
  </dependencies>
</plugin>

========================================

Для пользователей Apache Maven,

Следующая простая конфигурация, кажется, работает. ( со старым плагином maven-compiler-plugin; обновлено. )

<!-- This method doesn't work with newest maven-compiler-plugin -->
<!-- But if it's ok to work with old maven-compiler-plugin -->
<!-- This is the best method -->
<!-- There is no other required configurations -->
<!-- We don't even require to config any processor names -->

<project>
  <build>

    <extensions>
      <extension>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-jpamodelgen</artifactId>
        <version>1.3.0.Final</version>
      </extension>
    </extensions>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version> <!-- this is critical -->
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>

    </plugins>
  </build>
</project>

вы можете запустить его с помощью "mvn compiler: compile"

UPDATE

Обратите внимание, что этот метод работает только с теми старыми maven-compiler-plugin. Проверьте версию в коде.

17 голосов
/ 28 июня 2012

Поддержка Eclipse JPA 2.0 через Dali (которая входит в "Eclipse IDE для разработчиков JEE") имеет собственный генератор метамоделей, интегрированный с Eclipse.

  1. Выберите ваш проект в Package Explorer
  2. Перейти к Свойства -> JPA Диалог
  3. Выберите исходную папку из Каноническая метамодель (JPA 2.0) группа
  4. Нажмите кнопку Применить , чтобы создать классы метамодели в выбранной исходной папке

enter image description here

Это должно работать на любом провайдере JPA, поскольку сгенерированные классы являются стандартными.

Также см. здесь .

6 голосов
/ 09 июня 2014

Для eclipselink для генерирования метамодели достаточно только следующей зависимости. Больше ничего не нужно.

    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
        <version>2.5.1</version>
        <scope>provided</scope>
    </dependency>
4 голосов
/ 13 июля 2016

Для Hibernate в качестве провайдера, который является наиболее распространенным ИМХО:

В случае инструментов для сборки, таких как Gradle, Maven, вам необходимо иметь jar Hibernate JPA 2 Metamodel Generator на уровне пути к классам и компилятору> = 1.6, это все, что вам нужно для сборки проекта, и метамодель будет сгенерирована автоматически.

В случае IDE Eclipse 1. Перейдите в Проект-> Свойства-> Компилятор Java-> Обработка аннотаций и включите его. 2. Разверните Обработка аннотаций-> Заводской путь-> Добавить внешнюю банку, добавьте банку метабоделя в Hibernate JPA 2, проверьте новую добавленную банку и скажите «ОК». Очистить и построить сделано!

Ссылка на jar ссылку Hibernate JPA 2 Metamodel Generator из репозитория maven https://mvnrepository.com/artifact/org.hibernate/hibernate-jpamodelgen

...