IntelliJ IDEA 2026.1 Help

DTO ジェネレーター

DTO (データ転送オブジェクト) は、プロセス間でデータを転送するオブジェクトです。 JPA エンティティの DTO には通常、エンティティ属性のサブセットが含まれています。 例: REST API 経由でエンティティ属性の一部のみを公開する必要がある場合は、エンティティをそれらの属性を持つ DTO にマップし、それらのみをシリアル化できます。 基本的に、DTO を使用すると、プレゼンテーション / ビジネスロジック層をデータアクセス層から分離できます。

JPA Buddy は、ビジュアルデザイナーを介して JPA エンティティからの DTO 生成を提供します。

DTO 生成オプション

DTO を作成する場合、JPA Buddy では次のオプションから柔軟に選択できます。

  • Java レコード – DTO を Java レコードとして生成し、 equals()hashCode()toString() の自動実装を使用して DTO の簡潔かつ不変の表現を提供します。

  • すべての引数コンストラクター – DTO のすべてのフィールドの引数を受け入れるコンストラクターを生成します。

  • equals() および hashCode() – フィールドに基づいて DTO の equals() および hashCode() メソッドを生成します。

  • toString() – DTO の toString() メソッドを生成し、そのフィールドの文字列表現を提供します。

  • 可変 – デフォルトでは、生成された DTO は最終フィールドを含めて不変であり、setter はありません。 プライベートフィールドと setter を備えた変更可能な DTO が必要な場合は、このオプションをオンにできます。

  • Fluent setter – このオプションは、Mutable オプションを選択した場合に使用できます。 これにより、生成された setter が void の代わりに this を返すことができるようになり、複数の setter 呼び出しのメソッドチェーンが可能になります。

  • json の不明なプロパティを無視する – @JsonIgnoreProperties(ignoreUnknown = true) アノテーションを DTO に適用し、JSON 逆シリアル化中に不明なプロパティを無視できるようにします。 Jackson アノテーション(英語)依存関係がプロジェクトに含まれている場合にのみ使用できます。

new-dto-options.png

Lombok サポート

JPA Buddy は、最も最適な方法で Lombok サポートを提供することにより、DTO の生成を簡素化します。

例: DTO ジェネレーターウィザードで all-args コンストラクターequals() および hashCode()toString() オプションを選択すると、JPA Buddy は生成された DTO に @Value を適用し、冗長なアクセス修飾子を破棄してコードをクリーンな状態に保ちます。

new-dto-lombok-value
@Value public class OwnerDto implements Serializable { String firstName; String lastName; String telephone; }

上記の例と同じパラメーターを持つ 変更可能な DTO (英語) が必要な場合は、代わりに JPA Buddy によって @Data@AllArgsConstructor@NoArgsConstructor アノテーションが追加されます。

new-dto-lombok-data
@Data @AllArgsConstructor @NoArgsConstructor public class OwnerDto implements Serializable { private String firstName; private String lastName; private String telephone; }

関連付けの内部 DTO

エンティティは関連付けを介して他のエンティティを参照でき、JPA Buddy を使用すると、同じウィンドウから参照されたエンティティの DTO を生成できます。 ツリー内の参照エンティティを確認し、DTO タイプを選択して、必要なフィールドを選択するだけです。

inner-dtos.png

利用可能な DTO タイプを見てみましょう。

  • 新しいクラス – 新しいクラスは別のファイルに作成されます。

  • 新しいネストされたクラス – 新しいパブリック静的ネストされたクラスが作成されます。

  • 既存のクラス – プロジェクトにすでに存在する DTO クラスを選択できます。

  • Flat – すべての内部クラスフィールドがトップクラスフィールドになります。 生成されたエンティティの名前は、内部クラス名とフィールド名を組み合わせて形成されます。

Java レコードのサポート

プロジェクトで SDK バージョン 16 以降を使用する場合、JPA Buddy は 新規 DTO ウィザードに追加の Java レコード チェックボックスを提供します。 プロジェクトの SDK バージョンを確認するには、 ファイル | プロジェクト構造 を開きます。

project-structure

POJO からエンティティを生成する

JPA Buddy は、任意の java/kotlin クラスから JPA エンティティを生成するのに役立つ POJO からのエンティティアクションを提供します。 この機能は、API ファーストアプローチ (最初に API の DTO を定義し、後でデータモデルを実装する) に従ってアプリケーションを開発する場合に役立ちます。

JPA Buddy の注目すべき機能は、関係のカーディナリティを検出し、関連するエンティティを生成するか、既存のものを選択する機能です。

entity-from-pojo.png

任意の Java/Kotlin クラスから DTO を生成

現在、DTO パターンはソフトウェア開発で広く使用されています。 JPA エンティティだけでなく、通常の POJO クラスでも使用されています。 JPA Buddy を使用すると、DTO を JPA エンティティのみで使用することに制限されません。 任意の Java クラスまたは Kotlin クラスから DTO を作成できるため、コードの柔軟性と制御性が向上します。 例: MongoDB ドキュメントで JPA Buddy を簡単に使用できることを確認してください。

MapStruct のサポート

MapStruct(英語) は、マッピングの実装を大幅に簡素化するコードジェネレーターです。 プロジェクトに対応する依存関係が含まれている場合、 マッパークラス フィールドが 新規 DTO ウィンドウに表示されます。 既存のマッパーを選択することも、新しいマッパーを作成することもできます。

JPA Buddy は MapStruct マッパーを分析し、どの DTO がどのエンティティに関連付けられているかを定義できます。 このおかげで、JPA 構造内の対応するセクションで DTO を確認し、ガターアイコンを通じてエンティティと DTO の間を移動できます。

マッピング方法

また、すべてのエンティティのメソッドを備えた単一の大きなマッパーインターフェースが必要な場合、JPA Buddy が役立ちます。 この場合、オープンマッパークラスで IntelliJ IDEA メニューの生成 (Alt+Insert) を使用して、任意のエンティティのメソッドを作成します。

汎用マッパーの継承

MapStruct では汎用マッパーを宣言できます。

public interface EntityMapper<D, E> { E toEntity(D dto); D toDto(E entity); List<E> toEntity(List<D> dtoList); List<D> toDto(List<E> entityList); }

このようなマッパーは、他のすべてのマッパーの親として使用し、簡潔かつクリーンに保つのに便利です。

@Mapper(componentModel = "spring") public interface UserMapper extends EntityMapper<UserDTO, User> {}

ただし、必要に応じて、複雑なマッピングロジックを簡単に追加できます。

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = "spring") public interface ProjectMapper extends EntityMapper<ProjectDTO, Project> { @AfterMapping default void linkTasks(@MappingTarget Project project) { project.getTasks().forEach(task -> task.setProject(project)); } }

JPA Buddy は汎用マッパーの継承をサポートしています。

マッパー宣言

JPA Buddy は、マッパー宣言の柔軟な設定を提供します。 コレクションの命名パターンまたはマッピング命名戦略を構成するには、 ツール | JPA Buddy | マッパー宣言 を開きます。

mapper-declaration

モデルマッパーのサポート

ModelMapper(英語) は、エンティティを DTO に、またはその逆に変換するための最も人気のあるライブラリの 1 つです。 JPA Buddy は、マッピングプロセスをさらに効率化する次のような多くの機能を提供します。

  1. カスタムマッピングメソッドを生成します。

  2. 後置自動補完を使用して、単一のエンティティまたはエンティティのコレクションを DTO に、またはその逆にマッピングするためのコードスキャフォールディングを提供します。

  3. ModelMapper bean の関連クラスへのオンザフライインジェクションを有効にします。

Blaze 永続エンティティビューのサポート

Blaze-Persistence(英語) は、Java アプリケーション用の強力な永続化フレームワークです。 高度なクエリおよび最適化技術を提供し、データアクセス開発を簡素化し、開発者の生産性を向上させます。 JPA Buddy は、プロジェクトに 関連ライブラリが含まれている場合はいつでも、このフレームワークをサポートして JPA エンティティのエンティティビューを作成します。

次の手順でエンティティビューを作成できます。

  1. JPA 構造 | プラスボタン | Blaze Persistence エンティティビュー

  2. JPA デザイナー | プラスボタン | Blaze Persistence エンティティビュー

  3. エディターツールバー | DTO と Spring Data 射影 | Blaze Persistence エンティティビューの作成

  4. プロジェクト | 新規 | その他 | Blaze Persistence エンティティビュー

その後、エンティティビューを作成するためのダイアログが開きます。 パッケージ名やソースルートなどの標準の構成オプションに加えて、以下を構成できます。

  1. 親エンティティビュー

  2. エンティティビューが作成される JPA エンティティ

  3. エンティティビュークラス名

また、それぞれのチェックボックスを使用して、エンティティビューを作成可能または更新可能に設定できます。

blaze-persistence-entity-view.png

他のタイプの DTO と同様に、JPA Buddy は 関連付けの内部エンティティビューを構成する機能を提供します。

上記の構成では次のエンティティビューが生成されます。

@EntityView(Person.class) @UpdatableEntityView @CreatableEntityView public interface PersonView extends BaseView { @IdMapping Long getId(); void setId(Long id); String getName(); void setName(String name); int getAge(); void setAge(int age); @Mapping("posts.id") Set<Long> getPostIds(); void setPostIds(Set<Long> postIds); }

選択したチェックボックスにより、 @UpdatableEntityView および @CreatableEntityView アノテーションが生成されました。 更新可能または作成可能なエンティティビューには、@IdMapping アノテーションでマークされた属性が必要であることに注意してください。 チェックボックスの 1 つをオンにすると、JPA Buddy はエンティティで @Id アノテーションでマークされた属性を自動的に選択します。 また、更新可能または作成可能なエンティティビューには、すべての属性に対して setter が含まれます。

DTO とその JPA エンティティの同期を維持する

属性のリファクタリング

DTO は通常、クライアントが必要とするフィールドのみを定義するために API コントローラーレベルで使用されます。 そのため、DTO はエンティティの構造をほぼコピーします。 エンティティを DTO にマッピングしたり、その逆を行うための一般的なフレームワークとして、MapStruct と ModelMapper があります。 これらは、同名のプロパティを自動マッピングします。 ただし、エンティティ内のプロパティ名を変更すると、マッピングロジックが破損することがよくあります。 JPA Buddy は、開発者がエンティティプロパティとその関連フィールドを DTO でリファクタリングできます。

属性の追加

エンティティに新しい属性を追加した場合、対応する DTO もこの新しいフィールドで更新する必要がある場合があります。 JPA Buddy を使用すると、必要なすべての DTO に新しいフィールドを一度に追加できます。 さらに、ウィザードを使用するのではなく手動でコードを入力したい場合は、JPA Buddy がそれもサポートします。 DTO にないフィールドの名前を入力し始めるだけで、そのフィールドがクラスに正しく追加されます。 最も良い点は、関連付けでも機能することです。

DTO 宣言の設定

dto-declarations-preferences

各プロジェクトは、コード記述に関して独自の規則に従う場合があります。 ツール | JPA バディ | 設定できる DTO 宣言:

  1. シリアル化可能なタイプ。

  2. クラス名の接尾辞。

  3. Lombok を使うかどうか。

  4. コメントリンクの正規表現 (フィールドが空の場合、この機能は無効になります)。 これにより、JPA Buddy は DTO をその JPA エンティティに関連付けることができます。 コメントでターゲットエンティティ FQN (完全修飾名) のプレースホルダーを指定するには、 (?<entity>.*) パターンを使用します。 正規表現が DTO for (?:the )?\{@link (?<entity>.*)\} として定義されている場合は、次のコメントで解決されます。

    //DTO for the {@link io.jpabuddy.demo.entities.Project} entity
  5. クラス名の正規表現。 このオプションは、DTO の必須の命名規則に従う場合に便利です。 これにより、JPA Buddy は DTO 名のみを使用して DTO をその JPA エンティティに関連付けることができます。 (?<entity>.) パターンを使用して、ターゲット JPA エンティティの単純クラス名のプレースホルダーを指定できます。 たとえば、 (?.)Dto は、 MyEntityDto クラスが MyEntity の DTO として考慮されることを意味します。 フィールドが空の場合、この機能は無効になります。

  6. クラスのコメント。 DTO クラスに対して生成されるコメントを定義します。

検証ルール

JPA Buddy は、専用の DTO 生成ウィザード内で、DTO フィールドの bean 検証制約をシームレスに構成できます。 検証を最初から定義するだけでなく、対応するエンティティから検証を自動的に転送し、同じウィザードで管理することもできます。

dto-validation-rules

各制約を有効または無効にし、検証メッセージをカスタマイズできる柔軟性を備えたこの包括的な機能により、DTO フィールドのあらゆる範囲の bean 検証制約を簡単に管理できるようになり、アプリケーション全体での一貫性と再利用性が確保されます。

エンティティとその DTO 間の便利なナビゲーション

JPA Buddy が DTO クラスを対応するエンティティに関連付けると、次のようになります。

  • DTO クラスは、JPA 構造タブの DTO と射影 セクションおよびエディターツールバー (1) に表示されます。

  • DTO クラスにはガターアイコンが表示され、関連するエンティティへの簡単なナビゲーションが可能です (2)。

dto-navigation
2026 年 3 月 30 日