옵션

Spring Boot에서 엔티티 설계, 관계, 쿼리 최적화, 트랜잭션, 감사, 인덱싱, 페이징 및 풀링을 위한 JPA/Hibernate 패턴.

...모든 것을 확장하십시오
47
업데이트 된 시간 2026년 6월 30일

jpa-patterns 소개

jpa-patterns 특정 워크플로우에 초점을 맞춘 재사용 가능한 AI 스킬입니다. 설명: Spring Boot 환경에서 엔티티 설계, 관계, 쿼리 최적화, 트랜잭션, 감사, 인덱싱, 페이징 및 풀링을 위한 JPA/Hibernate 패턴.

이 스킬은 지침, 규칙 및 작업별 안내를 포함하여 에이전트가 작업을 보다 일관성 있게 수행할 수 있도록 지원합니다. Spring Boot 환경에서의 데이터 모델링, 리포지토리 및 성능 튜닝에 활용하세요. - JPA 엔티티 및 테이블 매핑 설계 - 관계 정의 (@OneToMany, @ManyToOne, @ManyToMany)

실무에서 이 스킬은 설정 단계가 적고 모호성이 적은 상태에서 반복적으로 작업을 수행해야 하는 사용자에게 가장 적합합니다. - 쿼리 최적화 (N+1 방지, 페치 전략, 프로젝션) - 트랜잭션, 감사 또는 소프트 삭제 구성 - 페이징, 정렬 또는 사용자 정의 리포지토리 메서드 설정 - 연결 풀링(HikariCP) 또는 2차 캐싱 튜닝

자주 묻는 질문

jpa-patterns는 어떤 도움을 주나요?

jpa-patterns 에이전트가 소스 문서에 설명된 집중적인 워크플로를 따르도록 도와주어, 모호성을 줄이고 실행이 의도된 작업과 일치하도록 유지합니다.

이 스킬은 언제 사용해야 하나요?

작업이 스킬 문서에 설명된 워크플로우, 도메인 또는 운영 규칙과 일치할 때, 특히 일관된 실행이 중요한 경우에 사용하십시오.

주요 제한 사항은 무엇인가요?

이 스킬은 원본 지침의 품질과 범위에 제약을 받습니다. 기본 문서가 불완전한 경우, 상담원이 추가적인 맥락 정보나 수동 검증이 필요할 수 있습니다.

GitHub에서 보기

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@EnableJpaAuditingclass 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
@Transactionalpublic 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=20spring.datasource.hikari.minimum-idle=5spring.datasource.hikari.connection-timeout=30000spring.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.

모든 파일

1개 파일

jpa-patterns 설치

스킬 파일을 다운로드하여 .claude/skills/ 디렉터리에 압축을 풀어주세요.

ZIP 다운로드

저장소를 클론하고 스킬 파일을 프로젝트에 복사하세요.

git clone https://github.com/affaan-m/ECC/blob/main/skills/jpa-patterns/SKILL.md # Copy SKILL.md to your .claude/skills/ directory

복사 복사
빠른 설정: skill 폴더를 .claude/skills/로 복사하면 Claude가 해당 스킬을 자동으로 감지하여 사용합니다.

관련 스킬

microservices-patterns
업데이트 된 시간 2026년 6월 29일
fabric-lakehouse
업데이트 된 시간 2026년 6월 30일
PostgreSQL Syntax Reference
업데이트 된 시간 2026년 6월 29일
prisma-expert
업데이트 된 시간 2026년 6월 29일
OR