jpa-patterns

JPA/Hibernate patterns for entity design, relationships, query optimization, transactions, auditing, indexing, pagination, and pooling in Spring Boot. Use when designing JPA entities or relationships, or when a Hibernate query, transaction, or N+1 problem needs fixing.

By affaan-m · 2,887 installs

npx skills add affaan-m/ecc --skill jpa-patterns

Source repository · Upstream listing

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 Enable auditing: Relationships and N+1 Prevention Default to lazy loading; use JOIN FETCH in queries when needed Avoid EAGER on collections; use DTO projections for read paths Repository Patterns Use projections for lightweight queries: Transactions Annotate service methods with @Transactional Use @Transactional(readOnly = true) for read paths to optimize Choose propagation carefully; avoid long running transactions Pagination 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: For PostgreSQL LOB handling, add: 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.