Source profileQuality 73/100

affaan-m/ECC/skills/jpa-patterns/SKILL.md

jpa-patterns

JPA/Hibernate patterns for entity design, relationships, query optimization, transactions, auditing, indexing, pagination, and pooling in Spring Boot.

Source repository stars
234,327
Declared platforms
0
Static risk flags
0
Last source update
2026-07-27
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Use for data modeling, repositories, and performance tuning in Spring Boot.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/affaan-m/ECC --skill "skills/jpa-patterns"
    Safe inspection promptEditorial

    Inspect the Agent Skill "jpa-patterns" from https://github.com/affaan-m/ECC/blob/4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38/skills/jpa-patterns/SKILL.md at commit 4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      When to Activate

      Designing JPA entities and table mappings

      Designing JPA entities and table mappingsDefining relationships (@OneToMany, @ManyToOne, @ManyToMany)Optimizing queries (N+1 prevention, fetch strategies, projections)
    2. 02

      Entity Design

      Review the “Entity Design” section in the pinned source before continuing.

      Review and apply the “Entity Design” source section.
    3. 03

      Relationships and N+1 Prevention

      Default to lazy loading; use JOIN FETCH in queries when needed

      Default to lazy loading; use JOIN FETCH in queries when neededAvoid EAGER on collections; use DTO projections for read paths- Default to lazy loading; use JOIN FETCH in queries when needed - Avoid EAGER on collections; use DTO projections for read paths
    4. 04

      Repository Patterns

      Use projections for lightweight queries:

      Use projections for lightweight queries:- Use projections for lightweight queries:

    Permission review

    Static risk signals and limitations

    No configured static risk pattern was detected

    This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score73/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars234,327SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    affaan-m/ECC
    Skill path
    skills/jpa-patterns/SKILL.md
    Commit
    4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38
    License
    MIT
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    JPA/Hibernate Patterns

    Use for data modeling, repositories, and performance tuning in Spring Boot.

    When to Activate

    • Designing JPA entities and table mappings
    • Defining relationships (@OneToMany, @ManyToOne, @ManyToMany)
    • Optimizing queries (N+1 prevention, fetch strategies, projections)
    • Configuring transactions, auditing, or soft deletes
    • Setting up pagination, sorting, or custom repository methods
    • Tuning connection pooling (HikariCP) or second-level caching

    Entity Design

    @Entity
    @Table(name = "markets", indexes = {
      @Index(name = "idx_markets_slug", columnList = "slug", unique = true)
    })
    @EntityListeners(AuditingEntityListener.class)
    public class MarketEntity {
      @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
    
      @Column(nullable = false, length = 200)
      private String name;
    
      @Column(nullable = false, unique = true, length = 120)
      private String slug;
    
      @Enumerated(EnumType.STRING)
      private MarketStatus status = MarketStatus.ACTIVE;
    
      @CreatedDate private Instant createdAt;
      @LastModifiedDate private Instant updatedAt;
    }
    

    Enable auditing:

    @Configuration
    @EnableJpaAuditing
    class JpaConfig {}
    

    Relationships and N+1 Prevention

    @OneToMany(mappedBy = "market", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<PositionEntity> positions = new ArrayList<>();
    
    • Default to lazy loading; use JOIN FETCH in queries when needed
    • Avoid EAGER on collections; use DTO projections for read paths
    @Query("select m from MarketEntity m left join fetch m.positions where m.id = :id")
    Optional<MarketEntity> findWithPositions(@Param("id") Long id);
    

    Repository Patterns

    public interface MarketRepository extends JpaRepository<MarketEntity, Long> {
      Optional<MarketEntity> findBySlug(String slug);
    
      @Query("select m from MarketEntity m where m.status = :status")
      Page<MarketEntity> findByStatus(@Param("status") MarketStatus status, Pageable pageable);
    }
    
    • Use projections for lightweight queries:
    public interface MarketSummary {
      Long getId();
      String getName();
      MarketStatus getStatus();
    }
    Page<MarketSummary> findAllBy(Pageable pageable);
    

    Transactions

    • Annotate service methods with @Transactional
    • Use @Transactional(readOnly = true) for read paths to optimize
    • Choose propagation carefully; avoid long-running transactions
    @Transactional
    public Market updateStatus(Long id, MarketStatus status) {
      MarketEntity entity = repo.findById(id)
          .orElseThrow(() -> new EntityNotFoundException("Market"));
      entity.setStatus(status);
      return Market.from(entity);
    }
    

    Pagination

    PageRequest page = PageRequest.of(pageNumber, pageSize, Sort.by("createdAt").descending());
    Page<MarketEntity> markets = repo.findByStatus(MarketStatus.ACTIVE, page);
    

    For cursor-like pagination, include id > :lastId in JPQL with ordering.

    Indexing and Performance

    • Add indexes for common filters (status, slug, foreign keys)
    • Use composite indexes matching query patterns (status, created_at)
    • Avoid select *; project only needed columns
    • Batch writes with saveAll and hibernate.jdbc.batch_size

    Connection Pooling (HikariCP)

    Recommended properties:

    spring.datasource.hikari.maximum-pool-size=20
    spring.datasource.hikari.minimum-idle=5
    spring.datasource.hikari.connection-timeout=30000
    spring.datasource.hikari.validation-timeout=5000
    

    For PostgreSQL LOB handling, add:

    spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
    

    Caching

    • 1st-level cache is per EntityManager; avoid keeping entities across transactions
    • For read-heavy entities, consider second-level cache cautiously; validate eviction strategy

    Migrations

    • Use Flyway or Liquibase; never rely on Hibernate auto DDL in production
    • Keep migrations idempotent and additive; avoid dropping columns without plan

    Testing Data Access

    • Prefer @DataJpaTest with Testcontainers to mirror production
    • Assert SQL efficiency using logs: set logging.level.org.hibernate.SQL=DEBUG and logging.level.org.hibernate.orm.jdbc.bind=TRACE for parameter values

    Remember: Keep entities lean, queries intentional, and transactions short. Prevent N+1 with fetch strategies and projections, and index for your read/write paths.

    Alternatives

    Compare before choosing