web-dev-qa-db-ja.com

JPA 2.0メタモデルを生成する方法は?

CriteriaQuery に関連付けられたタイプセーフティの精神で、JPA 2.0には、 メタモデル エンティティの表現をサポートするAPIもあります。

誰でもこのAPIの完全に機能する実装を知っていますか(メタモデルクラスを手動で作成するのではなく、メタモデルを生成するために)? Eclipseでこれを設定する手順を誰かが知っていれば素晴らしいでしょう(注釈プロセッサを設定するのと同じくらい簡単だと思いますが、あなたは決して知りません)。

編集:ちょうどつまずいた Hibernate JPA 2 Metamodel Generator 。ただし、jarのダウンロードリンクが見つからないため、問題は残ります。

編集2:私はこの質問をしてからしばらく経ちましたが、戻ってきて、SourceForgeの Hibernate JPA Model Generatorプロジェクトへのリンクを追加すると思いました

87
Andrey

誰かがEclipseでこれを設定する手順を知っていたら素晴らしいでしょう(注釈プロセッサを設定するのと同じくらい簡単だと思いますが、あなたは決して知りません)

はい、そうです。さまざまなJPA 2.0実装の実装と手順は次のとおりです。

EclipseLink

Hibernate

OpenJPA

DataNucleus


最新のHibernate実装は、次の場所から入手できます。

古いHibernate実装は次の場所にあります。

84
Pascal Thivent

改訂(2014年3月)

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でのみ機能することに注意してください。コードでバージョンを確認してください。

40
Jin Kwon

DaliによるEclipseのJPA 2.0サポート(「Eclipse IDE for JEE Developers」に含まれています)には、Eclipseと統合された独自のメタモデルジェネレーターがあります。

  1. Package Explorerでプロジェクトを選択します
  2. Properties->[〜#〜] jpa [〜#〜]ダイアログに移動
  3. 標準メタモデル(JPA 2.0)グループからソースフォルダーを選択
  4. Applyボタンをクリックして、選択したソースフォルダーにメタモデルクラスを生成します

enter image description here

生成されたクラスは標準であるため、これはどのJPAプロバイダーでも動作するはずです。

here も参照してください。

17
James

Eclipselinkの場合、メタモデルを生成するには次の依存関係のみで十分です。他に何も必要ありません。

    <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

最も一般的なIMHOであるプロバイダーとしてのHibernateの場合:

Gradle、Mavenなどのビルドツールの場合、クラスパスとコンパイラレベル> = 1.6にHibernate JPA 2メタモデルジェネレーターjarが必要です。プロジェクトをビルドするのに必要なのはそれだけで、メタモデルは自動的に生成されます。

IDE Eclipse 1.の場合、[プロジェクト]-> [プロパティ]-> [Javaコンパイラ]->注釈処理を有効にします。] 2. [注釈処理]-> [ファクトリパス]-> [外部Jarの追加] 2メタモデルジェネレーターjarで、新しく追加されたjarを確認し、「OK」と言います。

MavenリポジトリからHibernate JPA 2メタモデルジェネレーターjarリンクをリンクします https://mvnrepository.com/artifact/org.hibernate/hibernate-jpamodelgen

4
SandeepGodara