Spring Data
Spring Data JPA は、JPA ベースのリポジトリをすばやく簡単に実装できる、より大きな Spring Data ファミリの一部です。 JPA Buddy は、Java と Kotlin エンティティの両方に対して、リポジトリ、射影、クエリなどを生成するための明確な UI を提供します。 これらの機能を有効にするには、プロジェクトに インストールガイドに記載されている依存関係が含まれている必要があります。
リポジトリの作成
JPA Buddy は、ほとんどのユーザーにとって JPA 関連オブジェクトの操作をより便利にするために、リポジトリを作成するさまざまな方法を提供します。 プロジェクト内にリポジトリを生成する可能なすべての方法が、次のビデオで示されています。
「新規 JPA リポジトリ」ウィンドウでは、以下を設定できます。
リポジトリが作成されるエンティティ
リポジトリクラスの名前
リポジトリの親クラス。 次のようになります:
org.springframework.data.repository パッケージのリポジトリ
プロジェクトの任意のリポジトリ
リポジトリが JpaSpecificationExecutor を拡張するかどうか
ソースルート
リポジトリが作成されるパッケージ

各エンティティに対して Spring Data リポジトリを 1 つずつ作成するのは面倒な作業になることがあります。 JPA Buddy を使用すると、このプロセスを高速化できます。 複数の JPA エンティティのリポジトリを一度に作成するには、3 つの手順を実行する必要があります。 プロジェクトツリーでエンティティを選択し、JPA Buddy ウィザードを起動して、選択を調整します。 これで完了です。 この機能によって開発プロセスがどのように高速化されるかを見てみましょう。
JPA 構造リポジトリ
JPA Buddy は、各エンティティのすべてのリポジトリを 1 か所にグループ化し、プロジェクト内で最も効率的なナビゲーションを可能にします。 エンティティのリポジトリが別のプロジェクトパッケージにあるか、同じプロジェクトパッケージにあるかは関係ありません。 エンティティに関連するすべてのリポジトリが リポジトリ セクションに表示されます。 ここから、リポジトリの実装にすぐに移動したり、新しいリポジトリを作成したりできます。

クエリ / メソッドの生成
Spring Data は、 @Query アノテーションを使用してクエリを定義する機能を提供します。 JPA パレット (1) またはエディターツールバー (2) を使用してクエリをすばやく記述し、入力ミスを防ぐことができます。 次のクエリタイプのいずれかを選択し、便利な UI を使用して構成します。

サンプル
Find コレクションクエリの作成例を見てみましょう。

ウィンドウの上部で、コレクションとクエリの戻り値の型のラップ型を定義できます。 さらに、JPA Buddy を使用すると、 + ボタンをクリックして新しい 射影インターフェースまたは DTO クラスを生成できます。
メソッド名を指定することもできます。 ただし、空のままにすると、 クエリの命名規則に続いて名前が自動的に生成されます。
ウィンドウの中央には、クエリ条件のテーブルが含まれています。
ウィンドウの下部で次を指定できます。
パラメーターに名前を付けるかどうか。
Pageableパラメーターを使用するかどうか。その他。
最後に、クエリ結果を並べ替えるフィールドを指定できます。
上記の構成では、次のクエリが生成されます。
同じアプローチが派生クエリメソッドにも適用されます。 メソッド名フィールドを使用する代わりに、メソッド接頭辞ドロップダウンメニューを利用して、目的の件名のキーワードを定義し、エイリアスを追加できます。

これにより、生成されたクエリメソッドの命名規則をカスタマイズでき、コードに柔軟性と一貫性が提供されます。
エンティティインテンション
JPA Buddy は、クエリ / メソッド作成ウィンドウに直接つながるエンティティ属性のインテンションも提供します。 目的の属性にキャレットを置き、 Alt+Enter を押して、Spring Data リポジトリの作成メソッドをクリックします。 開いたウィンドウで、必要なクエリ / メソッドのタイプを選択します。
未解決の参照
JPA Buddy は、まだ存在しないメソッドを最初に呼び出してから実装することを好む開発者を支援します。 必要な署名を記述し、特別なアクションを介してクエリまたはメソッド作成ウィザードに移動するだけです。

設定
Spring Data では、派生クエリメソッド名用のキーワード式がいくつか提供されています。 NameContaining、NameIsContaining、NameContains のいずれも使用でき、結果は同じです。 一方で、メソッド命名に柔軟性が生まれます。 しかし、大規模なチームでは、同じアクションに対して命名が異なると、レビュー担当者や保守担当者が混乱することがあります。 開発チームで命名基準を定めている場合は、JPA Buddy を設定して、承認されたキーワードのみをメソッド名生成に使用できます。

既存のメソッド / クエリの変更
メソッドまたはクエリを設定するには、その上にカーソルを置き、JPA インスペクターを使用します。

エンティティグラフのサポート
EntityGraph は、JPA 2.1 で導入されることが最も待たれていた機能の 1 つです。 エンティティグラフを使用すると、フェッチする必要があるデータを制御する別の層が得られます。 JPA Buddy はそれらをサポートしているため、便利な GUI ウィザードを使用してグラフを構築できます。
クエリリファクタリング
非同期
Spring Data JPA は、リポジトリクエリを非同期で実行する機能を提供します。 クエリを非同期にするには、「@Async」アノテーションを追加するだけでは不十分で、戻り値の型を次のいずれかに変更する必要もあります。
Future<ClassName>CompletableFuture<ClassName>ListenableFuture<ClassName>
非同期クエリ結果の詳細については、対応する Spring Data JPA ドキュメント ページを参照してください。
クエリを非同期にするには、変更するクエリにキャレットを置き、ドロップダウンリストから結果の戻り値の型を選択します。

動的射影
Spring Data JPA では、汎用リポジトリメソッドを使用して実行時に射影を指定できます。 リポジトリメソッドに型クラスパラメーターを追加して、異なる射影で同じクエリを使用します。 これにより、ビジネスコードで優先される戻り値の型を定義できます。
クエリを汎用化するには、変更するクエリにキャレットを置き、「動的射影」ボックスをオンにします。

クエリの抽出
派生クエリメソッドは、クエリを定義する便利な方法です。 しかし、時間の経過とともに肥大化し読みにくい構造へ変化する可能性があり、その場合は @Query アノテーション付きのメソッドとして整理できます。 これは JPA Buddy で簡単に実現できます。 クエリにキャレットを置き、JPA インスペクタでクエリ抽出 ... をクリックします。
クエリの自動補完
IntelliJ IDEA コミュニティエディションの場合、JPA Buddy はクエリの自動補完機能を提供します (IntelliJ IDEA Ultimate エディションが提供する機能と同様)。 クエリにキャレットを置き、JPA インスペクタでクエリ編集 ... をクリックします。
射影
場合によっては、テーブルの列のサブセットのみが必要になることがあります。 そのような場合、Spring Data JPA 射影が役立ち、クエリから必要なフィールドのみを返すことができます。
新しい Spring 射影 ウィンドウでは、次のことができます。
ソースルートとパッケージを定義します。
エンティティクラスを選択します。
射影クラスの名前を設定します。
含めるフィールドを選択します。
また、JPA Buddy を使用すると、参照されたエンティティの射影を生成できます。 関連するエンティティを選択し、射影タイプを選択して、必要なフィールドを選択します。

上記の構成では、次の射影が生成されます。
射影を JPA エンティティと同期させる
時間の経過とともにエンティティが変化する可能性があるため、それに応じて射影を変更する必要があります。 JPA Buddy を使用すると、エンティティとその射影を同期したり、その逆を行うことができます。 この機能の詳細については、「DTO ジェネレーター 」セクションを参照してください。
射影宣言の設定
各プロジェクトは、コード記述に関して独自の規則に従う場合があります。 ツール -> JPA Buddy -> 射影宣言で、次の設定を行うことができます。
クラス名の接尾辞。
名前パターンの正規表現 (フィールドが空の場合、この機能は無効になります)。 このオプションは、Projection の必須の命名規則に従う場合に便利です。 これにより、JPA Buddy は Projection 名のみを使用して Projection をその JPA エンティティに関連付けることができます。
(?<entity>.)パターンを使用して、ターゲット JPA エンティティの単純クラス名のプレースホルダーを指定できます。 例:(?<entity>.*(?:Info|Prj|Projection|VO|Vo|View|Request|Browse)はMyEntityInfo、MyEntityPrjなどを意味します。 これらのクラスはMyEntityの Projection として扱われます。クラスのコメント。 Projection インターフェース上で生成されるコメントを定義します。
コメントリンクの正規表現 (フィールドが空の場合、この機能は無効になります)。 このオプションを使用すると、JPA Buddy が Projection をその JPA エンティティに関連付けることができます。 コメントでターゲットエンティティ FQN (完全修飾名) のプレースホルダーを指定するには、
(?<entity>.*)パターンを使用します。 正規表現がA Projection for the \{@link (?<entity>.*)\} entityとして定義されている場合、次の Javadoc コメントで解決されます。

エンティティとその射影間の便利なナビゲーション
JPA Buddy が Projection インターフェースをエンティティに関連付けることができるとすぐに、次のようになります。
Projection インターフェースは、JPA 構造パネルの Dto & Projections セクションおよびエディター ツールバー (1) に表示されます。
Projection には、エンティティへのナビゲーションを支援するガターアイコンが表示されます (2)。

監査サポート
大規模なアプリケーションでは、監査を行うことが重要です。 JPA Buddy は、一般的に使用される監査フィールドに @CreatedBy、 @CreatedDate、 @LastModifiedBy、 @LastModifiedDate などのアノテーションを提供することで、作業を容易にします。 さらに、JPA Buddy は、 @EnableJpaAuditing アノテーションを構成に追加するのを忘れた場合、または AuditingEntityListener が現在のエンティティに追加されていない場合に通知します。 これにより、間違いの余地がさらに少なくなります。
タグ: Spring Data、JPA、射影、監査、DTO、クエリ、リポジトリ、エンティティ、JPQL、ネイティブクエリ、動的射影
Blaze 永続性のサポート
Blaze-Persistence(英語) は Spring Data JPA とシームレスに統合され、Spring Data の利便性と生産性のメリットを享受しながら、高度なクエリ機能と最適化機能を活用できます。 JPA Buddy は、エンティティビュー用の Spring Data JPA リポジトリを作成するためのこのフレームワークのサポートを提供しますが、プロジェクトに 関連ライブラリが含まれている場合のみです。
エンティティビュー用の Spring Data JPA リポジトリの作成は、標準のリポジトリ作成ウィンドウから行えます。 エンティティビューを選択すると、親インターフェースのオプションは com.blazebit.persistence.spring.data.repository.EntityViewRepository またはその後継のいずれかのみになります。

Hibernate エンバースのサポート
JPA Buddy を使用すると、JPA リポジトリの作成時にリポジトリに RevisionRepository インターフェースを実装する必要があるかどうかを決定できます。 リポジトリ宣言にエンティティタイプ、エンティティ ID タイプ、およびリビジョン番号タイプが自動的に挿入されます。 例:

生成されたリポジトリ宣言は次のとおりです。