选项

Spring Boot 中用于实体设计、关系、查询优化、事务、审计、索引、分页和连接池的 JPA/Hibernate 设计模式。

...展开全部
45
更新时间 2026-06-30

关于jpa-patterns

jpa-patterns 这是一个专注于特定工作流的可复用AI技能。描述:Spring Boot中用于实体设计、关系、查询优化、事务、审计、索引、分页和连接池的JPA/Hibernate模式。

该技能整合了操作指南、规范以及针对具体任务的指导,以便代理能够更一致地执行工作。适用于 Spring Boot 中的数据建模、存储库和性能调优。- 设计 JPA 实体和表映射 - 定义关系 (@OneToMany、@ManyToOne、@ManyToMany)

实际上,该技能最适合需要可重复执行、且希望减少配置步骤和消除模糊性的用户。 - 优化查询(防止 N+1 问题、获取策略、投影) - 配置事务、审计或软删除 - 设置分页、排序或自定义存储库方法 - 调整连接池(HikariCP)或二级缓存

常见问题

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

复制 复制
快速设置: 将技能文件夹复制到 .claude/skills/ 目录下,Claude 会自动检测并使用该技能

相关技能

microservices-patterns
更新时间 2026-06-29
fabric-lakehouse
更新时间 2026-06-30
sql-pro
更新时间 2026-06-29
redis-best-practices
更新时间 2026-06-29
OR