Jak wygenerować metamodel JPA 2.0?

W duchu bezpieczeństwa typu związanego z kryteriami JPA 2.0 posiada również API do obsługi Metamodel reprezentacji podmiotów.

Czy ktoś zna w pełni funkcjonalną implementację tego API (do generowania metamodelu w przeciwieństwie do ręcznego tworzenia klas metamodelu)? Byłoby super, gdyby ktoś również znał kroki do Ustawienia tego w Eclipse (zakładam, że jest to tak proste, jak skonfigurowanie procesora adnotacji, ale nigdy wiedzieć).

Edytuj: Właśnie natknąłem się na Hibernate JPA 2 Metamodel Generator . Ale problem pozostaje, ponieważ nie mogę znaleźć żadnych linków do pobrania dla jar.

Edycja 2: Minęło trochę czasu od kiedy zadałem to pytanie, ale pomyślałem, że wrócę i dodam link do projektu Hibernate JPA Model Generator projektu na SourceForge

Author: Mark, 2010-06-14

5 answers

Byłoby super, gdyby ktoś również znał kroki do Ustawienia tego w Eclipse (zakładam, że jest to tak proste, jak skonfigurowanie procesora adnotacji, ale nigdy nie wiadomo)

Tak. Oto implementacje i instrukcje dla różnych JPA 2.0 implementacje:

EclipseLink

Hibernate

OpenJPA

Datanukleus


The najnowsza implementacja Hibernate jest dostępna pod adresem:

Starsza implementacja Hibernate znajduje się pod adresem:

 79
Author: Pascal Thivent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-20 18:04:00

Poprawione (Marzec/2014)

Proszę spojrzeć na jpa-metamodels-with-maven

Hibernate

Używanie Hibernate jest najbardziej zalecane.

(nie oceniam żadnych funkcji / funkcji/usability / stabilites na tych implementacjach. A powyższe stwierdzenie koncentruje się tylko na użyciu Mavena, które skonstruowałem.)

<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 wydaje się wymagać dodatkowego elementu <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 wymaga 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>

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

Dla użytkowników Apache Maven,

Prosta konfiguracja wydaje się działać. (ze starą wtyczką Maven-compiler-plugin; zaktualizowany.)

<!-- 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>

Można go uruchomić za pomocą "mvn compiler: compile"

UPDATE

Zauważ, że ta metoda działa tylko z tymi starymi wtyczkami Maven-compiler. Sprawdź wersję w kod.

 36
Author: Jin Kwon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-02 07:23:35

Obsługa JPA 2.0 Eclipse przez Dali (która jest zawarta w "Eclipse IDE for JEE Developers") ma swój własny generator metamodel zintegrowany z Eclipse.

  1. Wybierz swój projekt w Package Explorer
  2. Przejdź do Właściwości -> JPA dialog
  3. Wybierz folder źródłowy z Canonical metamodel (JPA 2.0) group
  4. Kliknij Zastosuj aby wygenerować klasy metamodelu w wybranym źródle folder

Tutaj wpisz opis obrazka

Powinno to działać na każdym dostawcy JPA, ponieważ generowane klasy są standardowe.

Zobacz też tutaj .

 16
Author: James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-23 11:09:30

Dla eclipselink wystarczy tylko następująca zależność, aby wygenerować metamodel. Nic więcej nie jest potrzebne.

    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
        <version>2.5.1</version>
        <scope>provided</scope>
    </dependency>
 6
Author: Sorter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-09 11:47:46

Dla Hibernate jako provider który jest najczęściej IMHO:

W przypadku narzędzi do budowania takich jak Gradle, Maven musisz mieć Hibernate JPA 2 Metamodel Generator Jar na poziomie classpath i kompilator> = 1.6 to wszystko czego potrzebujesz zbuduj projekt i metamodel zostanie wygenerowany automatycznie.

W przypadku IDE Eclipse 1. goto Project- > Properties-> Java Compiler- > Adnotation Processing and enable it. 2. Rozwiń przetwarzanie adnotacji- > ścieżka Fabryczna - > Dodaj zewnętrzny Jar dodaj Hibernate JPA 2 Generator Metamodel jar sprawdź nowo dodany jar i powiedz OK. Wyczyść i zbuduj gotowe!

Link Hibernate JPA 2 Metamodel Generator jar link z maven repo https://mvnrepository.com/artifact/org.hibernate/hibernate-jpamodelgen

 3
Author: SandeepGodara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-13 09:35:51