1. 概要

このチュートリアルでは、 JPAのサポートツールをいくつか見てください。 最も人気のある2つのIDEであるIntelliJIDEAとEclipseで利用可能なプラグインに焦点を当てます。

2. IntelliJIDEAおよびEclipseでのJPAサポート

JPAは、Javaアプリケーションでリレーショナルデータベースを操作するために最も広く使用されている仕様です。 実際、 JPAは、注釈からデータ処理ルールまで、実装のすべての側面を定義します。 

通常、JPAエンティティのみに取り組むことはありません。 純粋なORM関連のコードに加えて、データベースのバージョニングシステム、SQL / JPQL / HQLクエリの最適化、IoCコンテナとの統合なども必要になる場合があります。 ここでプラグインが非常に役立ちます。 これらは、データベースのリバースエンジニアリング、スキーマの生成、移行スクリプトの生成、またはSpringDataJPAリポジトリのスキャフォールディングをサポートできます。 

アプリ開発でJPAフレームワークを使用する場合、通常はIDEを使用して行われます。 これは、開発者の生産性を高める強力なツールセットを提供しているためです。  

  • ボイラープレートコードの生成
  • データベースリバースエンジニアリング
  • データオブジェクト定義の生成
  • JavaとJPQLの両方の高度なコードオートコンプリート
  • JPA固有のコード提案

最も一般的な2つのIDE(IntelliJ IDEAとEclipse)を見て、JPAアプリケーション開発サポートの観点からそれらが何を提供するかを見てみましょう。

3. IntelliJ IDEA

IntelliJ IDEAには、Community Edition(無料)とUltimate(有料)の2つのバージョンがあります。 Ultimateバージョンには、JPAをサポートするプラグインがバンドルされています。 

一方、Community Editionは、JPA、Hibernate、SpringDataなどを操作するための特別なサポートを提供していません。

ただし、IntelliJには、さまざまなプラグインを備えた幅広い市場があります。 したがって、ほぼすべてのテクノロジーのサポートを見つけることができ、JPAも例外ではありません。 

IntelliJ IDEAコミュニティユーザー向けに、JPA機能をサポートするためのJPAバディプラグインについて説明します。 それでも、IntelliJIDEAUltimateに追加することもできます。

3.1. IntelliJUltimate用のJPAプラグイン

このプラグインは、次のような一連の高度な機能を提供します。

  • ER-JPAエンティティの図
  • 永続化ツールウィンドウ 
  • データベースリバースエンジニアリング
  • JPQLステートメントをテストしてDDLスクリプトを生成するJPAコンソール
  • JPA固有のコード検査と完了

IntelliJ IDEA Ultimateでは、専用のツールウィンドウである「永続性」を使用できます。 これにより、プロジェクト内のJPAエンティティの構造が表示されます。

このビューでは、ビジュアルツールを使用してエンティティの属性とリレーションを作成できます。

「永続性」ウィンドウでは、コードエディタのガターアイコンを使用して、コードとそれに関連するエンティティ階層間をすばやく移動することもできます。 

リバースエンジニアリングプロセスを利用することもできます。  これにより、JPAエンティティ、アソシエーション、および適切なアノテーションが生成されます。 また、 pesistence.xml ファイルを作成するか、存在する場合は更新します。

一般的なJPAサポートとは別に、JPA実装としてHibernateを選択すると、追加のヘルプが提供されます。 次のようなHibernate固有のアクションを実行できます(ただし、これらに限定されません)。

  • 構成ファイルとマッピングファイルを管理する
  • HQLコンソールでHQLクエリを実行する

Youtubeで利用可能なプラグインの動作を示す詳細なレビューがあります。

3.2. JPAバディ

JPA Buddyは、JPAエンティティおよびSpring DataJPAリポジトリを操作するためのビジュアルエディタのセットを提供します。 さらに、Java言語とKotlin言語の両方をサポートしています。 

それが提供する主な機能を見てみましょう:

  • ビジュアルツールとコードナビゲーション
  • HibernateBean検証のサポート
  • HibernateタイプとJPAコンバーターのサポート
  • データベースバージョニングツールのサポート(LiquibaseおよびFlyway)
  • JPA固有のコード検査
  • Kotlinのサポート
  • SpringDataRepositoriesビジュアルデザイナー

すべてのJPAアノテーション、Spring Dataリポジトリメソッドの命名規則、またはLiquibaseタグを覚えておく必要はありません。 プラグインを使用すると、パレットから必要なアイテムを選択できます。

したがって、を使用すると、コードを記述する代わりに、ビジュアルエディターでプロパティを更新できます。

JPAバディが対処するもう1つの課題は、データベースのバージョン管理です。 プラグインはLiquibaseツールとFlywayツールの両方をサポートし、それに応じてXMLまたはSQL移行スクリプトを生成できます。

JPAバディは、プロジェクトデータベースをコードベースで定義された実際のJPAエンティティと比較することによってスクリプトを生成します。 生成後、コードベースに保存する前に、生成されたスクリプトを確認して更新できます。

これに加えて、プラグインには、次のようないくつかのスマートインスペクションとクイックフィックスが導入されています。

  • エンティティコードにIDフィールドがありません
  • 引数なしのコンストラクターがない
  • ロンボクの使用に関する潜在的な問題(例: 不適切なequals()&hashCode()定義) 

JPAサポートとは別に、プラグインはSpringDataJPAリポジトリーの作成を支援できます。 適切なリポジトリメソッドの命名に役立つビジュアルエディタを提供します。

4. Eclipse

ご存知のように、Eclipseには大きなプラグインエコシステムがあります。 それにもかかわらず、 Dali Toolsプラグインは、EclipseIDEでのJPAサポートの事実上の標準です。

このプラグインを調べてみましょう。 次に、プロジェクトでHibernateを使用する場合に追加のサポートを取得する方法を説明します。

4.1. ダリツール

DaliはJPA開発のほぼすべての領域をカバーしています。 その機能には次のものが含まれます(ただし、これらに限定されません)。 

  • ER-JPAエンティティの図
  • ビジュアルエディタとナビゲーター
  • JPAモデルに基づくDDL(SQL)生成
  • データベースリバースエンジニアリング 

プラグインによって提供される2つの主要なビジュアルツールがあります。 コンテキスト依存の「JPA詳細」エディターを使用すると、「JPA構造」ナビゲーターで選択できるさまざまなJPAオブジェクトを操作できます。

以下を選択して変更できます。

  • 名前付きクエリを含むエンティティ定義(JPQLコード支援付き)
  • エンティティの属性と関連付け:1対多、多対1など。
  • orm.xmlファイル。 プロジェクトのデフォルトのマッピングと永続性情報を編集できます

また、専用の persistence.xml エディターを使用すると、JPA仕様に従ってこの構成ファイルで使用できるすべてのパラメーターを記憶する必要がなくなります。 接続オプションからロックタイムアウトまたは検証モードまで、すべてを編集できます。 

Dali Toolsプラグインは、JPAモデルに基づいて特定のデータベースのDDLSQLを生成および実行できます。 さらに、実行フェーズは生成から分離されているため、生成されたSQLをアプリのDBに適用する前に確認できます。 

データベースのリバースエンジニアリングプロセス設定により、エンティティコードの次のオプションを変更できます。

  • PK生成戦略
  • フィールドアクセスポリシー
  • アソシエーションフェッチポリシー
  • コレクションプロパティクラス(リスト、セット、…)

4.2. JBoss Hibernate Tools

特にHibernateのサポートが必要な場合のオプションを見てみましょう。  Eclipseプラグインリポジトリには、JbossHibernateToolsプラグインがあります。

このプラグインは、独立して使用することも、JPAツールと組み合わせて使用することもでき、以下を提供します。

  • リバースエンジニアリングやリファクタリングなどのコード生成ツール
  • 高度なHibernate構成およびマッピングファイルの表示と編集
  • HQL実行コンソールとSQLプレビュー
  • データモデルのエクスポート

リバースエンジニアリングツールを使用すると、テーブル名マスク、タイプマッピングなどの多くのオプションを構成でき、生成されたエンティティクラスから一部の列を除外することもできます。

生成されたJPAエンティティは、 *.hbm.xmlマッピングファイルを含むPOJOまたは注釈付きクラスとして表すことができます。 また、プラグインは、CRUDメソッドを使用するすべてのエンティティのDAOオブジェクト生成をサポートします。 DAOは、データベースアクセスにHibernate固有のクラスを利用します。

HQL実行コンソールと基準エディターを使用すると、HQLクエリを生成して実行できます。 任意のHQLを実行する以外に、コンソールはHQLステートメントのSQLプレビューを提供します。 「n+1select」やその他のORMエッジケースを回避するために、最適化されたSQLクエリを作成するのに役立つ可能性があります。

5. 結論

この記事では、最も人気のあるJavaIDEで利用可能なJPAサポート用のいくつかのツールであるIntelliJIDEAとEclipseについて説明しました。

これらが開発中に、より優れたアプリケーションを作成して生産性を向上させるのにどのように役立つかを見てきました。 したがって、作業に最適なツールを選択するときは、「純粋なJPA」機能だけでなく、IDEおよび選択した開発スタックとの統合にも注意を払う必要があります。