mcpField
J
java-jpa-hibernate

java-jpa-hibernate

github.com/pluginagentmarketplace開発41615 回インストール42 週間前に更新
リポジトリ

java-jpa-hibernate について

JPA、Hibernate、Spring Data を扱う Java 開発者向けのスキルガイドです。エンティティ設計、クエリ最適化、トランザクション、キャッシュ、永続化の問題調査を扱います。

主な機能

  1. 01JPA エンティティと関連マッピング
  2. 02Hibernate クエリ最適化
  3. 03Spring Data リポジトリとクエリ戦略
  4. 04トランザクションとロック設定
  5. 05キャッシュ戦略と永続化の問題調査

活用シーン

  1. 01エンティティ関連を持つ永続化モデルの設計
  2. 02N+1 クエリの特定と削減
  3. 03トランザクション、ロック、キャッシュの設定
  4. 04遅延ロードや接続問題の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-java --skill java-jpa-hibernate

インストール後、Claude Code で/java-jpa-hibernateを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
config.yaml
schema.json
references/
GUIDE.md
PATTERNS.md
scripts/
validate.py

詳細

Java JPA Hibernate スキル

本番アプリケーション向けに、JPA と Hibernate によるデータ永続化を習得します。

概要

このスキルでは、JPA エンティティの設計、Hibernate の最適化、Spring Data リポジトリ、クエリ戦略、キャッシュについて扱います。N+1 クエリを防ぎ、高性能な永続化レイヤーを構築することに重点を置いています。

このスキルを使う場面

次のような場合に使用します。

  • リレーションを持つ JPA エンティティを設計する
  • データベースクエリを最適化する
  • パフォーマンスを考慮して Hibernate を設定する
  • キャッシュ戦略を実装する
  • 永続化に関する問題をデバッグする

対象トピック

エンティティ設計
  • エンティティのマッピングアノテーション
  • リレーションの種類(1:1、1:N、N:M)
  • 継承戦略
  • ライフサイクルコールバック
  • 監査
クエリの最適化
  • N+1 問題の防止
  • JOIN FETCH と EntityGraph の比較
  • バッチフェッチ
  • プロジェクションと DTO
トランザクション
  • @Transactional の設定
  • 伝播と分離レベル
  • 楽観的ロックと悲観的ロックの比較
  • デッドロックの防止
キャッシュ
  • 第 1 レベルキャッシュと第 2 レベルキャッシュ
  • クエリキャッシュ
  • キャッシュの無効化
  • Redis との連携

クイックリファレンス

// Entity with relationships
@Entity
@Table(name = "orders")
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "customer_id", nullable = false)
    private Customer customer;

    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
    @BatchSize(size = 20)
    private List<OrderItem> items = new ArrayList<>();

    @Version
    private Long version;

    // Bidirectional helper
    public void addItem(OrderItem item) {
        items.add(item);
        item.setOrder(this);
    }
}

// Auditing base class
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Auditable {
    @CreatedDate
    @Column(updatable = false)
    private Instant createdAt;

    @LastModifiedDate
    private Instant updatedAt;
}

// Repository with query optimization
public interface OrderRepository extends JpaRepository<Order, Long> {

    // JOIN FETCH to prevent N+1
    @Query("SELECT DISTINCT o FROM Order o JOIN FETCH o.items WHERE o.status = :status")
    List<Order> findByStatusWithItems(@Param("status") Status status);

    // EntityGraph alternative
    @EntityGraph(attributePaths = {"items", "customer"})
    Optional<Order> findById(Long id);

    // DTO Projection
    @Query("SELECT new com.example.OrderSummary(o.id, o.status, c.name) " +
           "FROM Order o JOIN o.customer c WHERE o.id = :id")
    Optional<OrderSummary> findSummaryById(@Param("id") Long id);
}

N+1 の防止策

戦略使用する場面例
JOIN FETCHリレーションが常に必要な場合JOIN FETCH o.items
EntityGraph動的にフェッチする場合@EntityGraph(attributePaths)
@BatchSizeコレクションにアクセスする場合@BatchSize(size = 20)
DTO Projection読み取り専用のクエリnew OrderSummary(...)

Hibernate の設定

spring:
  jpa:
    open-in-view: false  # Critical!
    properties:
      hibernate:
        jdbc.batch_size: 50
        order_inserts: true
        order_updates: true
        default_batch_fetch_size: 20
        generate_statistics: ${HIBERNATE_STATS:false}

  datasource:
    hikari:
      maximum-pool-size: 20
      minimum-idle: 5
      leak-detection-threshold: 60000

トラブルシューティング

よくある問題
問題原因解決策
N+1 クエリループ内での遅延読み込みJOIN FETCH、EntityGraph
LazyInitExceptionセッションが閉じているDTO プロジェクション
クエリが遅いインデックスがないEXPLAIN ANALYZE
接続リーク@Transactional がないアノテーションを追加
デバッグ用プロパティ
spring.jpa.show-sql=true
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.orm.jdbc.bind=TRACE
hibernate.generate_statistics=true
デバッグチェックリスト
□ Enable SQL logging
□ Check query count per request
□ Verify fetch strategies
□ Review @Transactional
□ Check connection pool

使用方法

Skill("java-jpa-hibernate")

関連スキル

  • java-performance - クエリの最適化
  • java-spring-boot - Spring Data

コメント