web-dev-qa-db-fra.com

Comment générer le métamodèle JPA 2.0?

Dans l’esprit du type sécurité associé à CriteriaQuery , JPA 2.0 dispose également d’une API pour prendre en charge la représentation métamodèle des entités.

Est-ce que quelqu'un est au courant d'une implémentation entièrement fonctionnelle de cette API (pour générer le métamodèle plutôt que de créer les classes de métamodèle manuellement)? Ce serait génial si quelqu'un connaissait également les étapes pour configurer cela dans Eclipse (je suppose que c'est aussi simple que de configurer un processeur d'annotation, mais on ne sait jamais).

EDIT: Nous sommes tombés par hasard sur Générateur de métamodèles Hibernate JPA 2 . Mais le problème demeure puisque je ne trouve aucun lien de téléchargement pour le pot.

EDIT 2: Je n'ai plus posé cette question depuis longtemps, mais je pensais revenir et ajouter un lien vers le projet projet Hibernate JPA Model Generator sur SourceForge

87
Andrey

Ce serait génial si quelqu'un connaissait également les étapes pour configurer cela dans Eclipse (je suppose que c'est aussi simple que de configurer un processeur d'annotation, mais vous ne savez jamais).

Oui, ça l'est. Voici les implémentations et les instructions pour les différentes implémentations de JPA 2.0:

EclipseLink

Hibernate

OpenJPA

DataNucleus


La dernière mise en œuvre d'Hibernate est disponible à l'adresse suivante:

Une implémentation plus ancienne d'Hibernate est à:

84
Pascal Thivent

RÉVISÉ (mars/2014)

S'il vous plaît jeter un oeil à jpa-metamodels-with-maven

Hibernate

L'utilisation d'Hibernate est la plus recommandée.

( Je ne juge aucun des fonctionnalités/fonctions/utilisabilités/stabilites sur ces implémentations. Et la déclaration ci-dessus est uniquement focalisée sur l'utilisation de maven que j'ai construite.)

<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 semble nécessiter un élément supplémentaire <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 requiert 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>

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

Pour les utilisateurs d'Apache Maven,

Suivre une configuration simple semble fonctionner. ( avec l'ancien maven-compiler-plugin; mis à jour. )

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

vous pouvez le lancer avec "compilateur mvn: compiler"

[~ # ~] met à jour [~ # ~]

Notez que cette méthode ne fonctionne qu'avec ces anciens plugins maven-compiler-plugin. Vérifiez la version dans le code.

40
Jin Kwon

Le support JPA 2.0 d’Eclipse via Dali (inclus dans "Eclipse IDE pour les développeurs JEE") dispose de son propre générateur de métamodèles intégré à Eclipse.

  1. Sélectionnez votre projet dans l'explorateur de packages
  2. Allez dans Propriétés -> [~ # ~] jpa [~ # ~] dialogue
  3. Sélectionnez le dossier source dans le groupe du métamodèle Canonical (JPA 2.0) .
  4. Cliquez sur le bouton Appliquer pour générer des classes de métamodèle dans le dossier source sélectionné.

enter image description here

Cela devrait fonctionner sur n'importe quel fournisseur JPA, car les classes générées sont standard.

Voir aussi ici .

17
James

Pour eclipselink, seule la dépendance suivante suffit pour générer le métamodèle. Rien d'autre n'est nécessaire.

    <dependency>
        <groupId>org.Eclipse.persistence</groupId>
        <artifactId>org.Eclipse.persistence.jpa.modelgen.processor</artifactId>
        <version>2.5.1</version>
        <scope>provided</scope>
    </dependency>
6
Sorter

Pour Hibernate en tant que fournisseur qui est le plus commun IMHO:

Dans le cas d'outils de compilation tels que Gradle, Maven, vous devez disposer du fichier jar Generator de Hibernate JPA 2 dans le chemin d'accès aux classes et au niveau du compilateur> = 1.6. Il suffit de générer le projet et le métamodèle est généré automatiquement.

Dans le cas de IDE Eclipse 1. ouvrez Projet-> Propriétés-> Compilateur Java-> Traitement des annotations et activez-le. 2. Développez Traitement des annotations-> Chemin de la fabrique-> Ajouter un pot externe et ajoutez Hibernate JPA 2 Le bocal Metamodel Generator vérifie le bocal nouvellement ajouté et dit OK, nettoyez et construisez!

Lien Fichier jar du générateur de métamodèles JPA 2 Hibernate depuis le dépôt maven https://mvnrepository.com/artifact/org.hibernate/hibernate-jpamodelgen

4
SandeepGodara