Communitygithub.com

jpa-patterns

JPA/Hibernate 设计模式,涵盖实体建模、关系映射、查询优化、事务、审计、索引、分页及连接池管理,适用于 Spring Boot 项目。当需要设计 JPA 实体和关系、解决 Hibernate 查询、事务或 N+1 问题时激活。

jpa-patterns 是什么?

该技能提供了一整套 JPA/Hibernate 的最佳实践模式,专注于 Spring Boot 中的数据建模、Repository 设计以及性能调优。它涵盖了从实体设计(包括泛化)、关系映射(@OneToMany、@ManyToOne、@ManyToMany)、N+1 查询预防(通过 JOIN FETCH 和 DTO 投影)、到事务管理(@Transactional)和分页等关键场景。此外,还包含了连接池(HikariCP)调优参数、二级缓存策略、基于 Flyway 或 Liquibase 的数据库迁移以及使用 @DataJpaTest 和 Testcontainers 进行数据访问测试的最佳实践。该技能适用于任何需要设计 JPA 实体、优化查询性能、处理关系或排查 Hibernate 相关问题的场景,尤其适用于需要确保数据访问层遵循竟可能最佳实践的 Spring Boot 应用。

兼容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/jpa-patterns

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

JPA/Hibernate 模式

用于 Spring Boot 中的数据建模、仓库及性能调优。

何时激活

  • 设计 JPA 实体和表映射时
  • 定义关系(@OneToMany、@ManyToOne、@ManyToMany)时
  • 优化查询(预防 N+1、获取策略、投影)时
  • 配置事务、审计或软删除时
  • 设置分页、排序或自定义仓库方法时
  • 调优连接池(HikariCP)或二级缓存时

实体设计

@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;
}

启用审计:

@Configuration
@EnableJpaAuditing
class JpaConfig {}

关系与 N+1 预防

@OneToMany(mappedBy = "market", cascade = CascadeType.ALL, orphanRemoval = true)
private List<PositionEntity> positions = new ArrayList<>();
  • 默认使用懒加载;需要时在查询中使用 JOIN FETCH
  • 在集合上避免使用 EAGER;对读取路径使用 DTO 投影
@Query("select m from MarketEntity m left join fetch m.positions where m.id = :id")
Optional<MarketEntity> findWithPositions(@Param("id") Long id);

仓库模式

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);
}
  • 使用投影进行轻量级查询:
public interface MarketSummary {
  Long getId();
  String getName();
  MarketStatus getStatus();
}
Page<MarketSummary> findAllBy(Pageable pageable);

事务

  • 在服务方法上标注 @Transactional
  • 对读取路径使用 @Transactional(readOnly = true) 以优化性能
  • 谨慎选择传播行为;避免长时间运行的事务
@Transactional
public Market updateStatus(Long id, MarketStatus status) {
  MarketEntity entity = repo.findById(id)
      .orElseThrow(() -> new EntityNotFoundException("Market"));
  entity.setStatus(status);
  return Market.from(entity);
}

分页

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

对于基于游标的分页,在 JPQL 中包含 id > :lastId 并配合排序。

索引与性能

  • 为常见过滤条件(status、slug、外键)添加索引
  • 使用复合索引以匹配查询模式(status, created_at)
  • 避免 select *;只投影所需列
  • 使用 saveAll 和 hibernate.jdbc.batch_size 进行批量写入

连接池(HikariCP)

推荐配置:

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

对于 PostgreSQL LOB 处理,添加:

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

缓存

  • 一级缓存是每个 EntityManager 自有的;避免跨事务持有实体
  • 对于读密集的实体,谨慎考虑二级缓存;验证驱逐策略

迁移

  • 使用 Flyway 或 Liquibase;生产环境中绝不依赖 Hibernate 自动 DDL
  • 保持迁移的幂等性和增量性;避免未规划就删除列

测试数据访问

  • 推荐使用 @DataJpaTest 配合 Testcontainers 以模拟生产环境
  • 通过日志检查 SQL 效率:设置 logging.level.org.hibernate.SQL=DEBUG 和 logging.level.org.hibernate.orm.jdbc.bind=TRACE 以查看参数值

记住:保持实体简洁,查询有目的性,事务简短。使用获取策略和投影预防 N+1,并为读写路径建立索引。

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

相关技能