提供 Spring Boot 中 JPA/Hibernate 设计与性能优化实践指导
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "jpa-patterns" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/docs/ja-JP/skills/jpa-patterns/SKILL.md 2. 保存为 ~/.claude/skills/jpa-patterns/SKILL.md 3. 装好后重载技能,告诉我可以用了
请基于 Spring Boot 和 JPA,设计一个电商系统的实体模型,包含用户、订单、订单项、商品四个实体。说明一对多、多对一关系该如何映射,如何避免级联与懒加载常见问题,并给出示例代码。
输出包含实体设计建议、关系映射说明、注解示例与常见陷阱规避方案。
请分析一个使用 Spring Data JPA 的订单查询接口为什么慢,重点从 N+1 查询、fetch join、索引设计、分页查询和 DTO 投影几个方面给出优化建议,并附带示例代码。
输出性能瓶颈分析、可执行优化方案,以及改造前后的查询写法示例。
请给我一套 Spring Boot 项目的 JPA 最佳实践,覆盖事务边界设计、只读事务、审计字段 createdAt/updatedAt、乐观锁 version 字段,以及连接池配置建议。
输出一套可落地的配置与代码模板,帮助统一事务、审计和并发控制实践。
Spring Bootでのデータモデリング、リポジトリ、パフォーマンスチューニングに使用します。
@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 {}
@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 でバッチ書き込み推奨プロパティ:
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
@DataJpaTest を優先logging.level.org.hibernate.SQL=DEBUG と logging.level.org.hibernate.orm.jdbc.bind=TRACE を設定注意: エンティティを軽量に保ち、クエリを意図的にし、トランザクションを短く保ちます。フェッチ戦略とプロジェクションでN+1を防ぎ、読み取り/書き込みパスにインデックスを作成します。
帮助开发者为代码代理配置性能优化、安全防护与研究优先工作流。
提供数据库迁移、回滚与零停机发布的最佳实践指导,适用于多种 ORM 与 SQL 数据库。
通过双评审智能体对结果进行对抗式校验,提升输出发布前的可靠性
帮助你掌握地道 Rust 模式、所有权与并发实践,编写安全高性能应用。
基于 C++ Core Guidelines 编写、审查并重构更安全现代的 C++ 代码。
为 Claude Code 会话提供系统化校验流程,帮助检查结果正确性与质量。
提供 Spring Boot 中 JPA/Hibernate 设计、优化与事务治理实践模式
帮助你设计与优化 Spring Boot 后端架构、接口与服务实现。
帮助你规划与实现 Spring Boot 后端架构、接口与常用工程模式。
帮助用户设计和实现 Spring Boot 后端架构、REST API 与常见工程模式。
帮助开发者掌握 Kotlin Exposed ORM 的查询、事务与迁移实践
提供面向生产后端的 MySQL 与 MariaDB 设计、查询与运维模式建议。