关于 java-jpa-hibernate
面向 Java 持久化开发的技能指南,涵盖 JPA、Hibernate 与 Spring Data。重点包括实体设计、查询优化、事务、缓存和问题排查。
主要功能
- 01JPA 实体与关系映射
- 02Hibernate 查询优化
- 03Spring Data 仓库与查询策略
- 04事务与锁配置
- 05缓存策略与持久化排错
适用场景
- 01设计具有实体关系的持久化模型
- 02定位并减少 N+1 查询
- 03配置事务、锁和缓存
- 04排查延迟加载及连接问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-java --skill java-jpa-hibernate安装后在 Claude Code 中输入/java-jpa-hibernate确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/config.yamlschema.jsonreferences/GUIDE.mdPATTERNS.mdscripts/validate.py详细介绍
Java JPA Hibernate 技能
掌握适用于生产应用的 JPA 和 Hibernate 数据持久化。
概述
此技能涵盖 JPA 实体设计、Hibernate 优化、Spring Data 仓库、查询策略和缓存。重点是防止 N+1 查询,并构建高性能持久化层。
何时使用此技能
在以下情况下使用:
- 设计具有关系的 JPA 实体
- 优化数据库查询
- 配置 Hibernate 以提升性能
- 实现缓存策略
- 调试持久化问题
涵盖主题
实体设计
- 实体映射注解
- 关系类型(1:1、1:N、N:M)
- 继承策略
- 生命周期回调
- 审计
查询优化
- 防止 N+1 问题
- JOIN FETCH 与 EntityGraph
- 批量抓取
- 投影和 DTO
事务
- @Transactional 配置
- 传播和隔离
- 乐观锁与悲观锁
- 防止死锁
缓存
- 一级缓存和二级缓存
- 查询缓存
- 缓存失效
- Redis 集成
快速参考
// Entity with relationships
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "customer_id", nullable = false)
private Customer customer;
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
@BatchSize(size = 20)
private List<OrderItem> items = new ArrayList<>();
@Version
private Long version;
// Bidirectional helper
public void addItem(OrderItem item) {
items.add(item);
item.setOrder(this);
}
}
// Auditing base class
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Auditable {
@CreatedDate
@Column(updatable = false)
private Instant createdAt;
@LastModifiedDate
private Instant updatedAt;
}
// Repository with query optimization
public interface OrderRepository extends JpaRepository<Order, Long> {
// JOIN FETCH to prevent N+1
@Query("SELECT DISTINCT o FROM Order o JOIN FETCH o.items WHERE o.status = :status")
List<Order> findByStatusWithItems(@Param("status") Status status);
// EntityGraph alternative
@EntityGraph(attributePaths = {"items", "customer"})
Optional<Order> findById(Long id);
// DTO Projection
@Query("SELECT new com.example.OrderSummary(o.id, o.status, c.name) " +
"FROM Order o JOIN o.customer c WHERE o.id = :id")
Optional<OrderSummary> findSummaryById(@Param("id") Long id);
}
N+1 防护策略
| 策略 | 适用场景 | 示例 |
|---|---|---|
| JOIN FETCH | 始终需要关联数据 | JOIN FETCH o.items |
| EntityGraph | 动态抓取 | @EntityGraph(attributePaths) |
| @BatchSize | 访问集合 | @BatchSize(size = 20) |
| DTO 投影 | 只读查询 | new OrderSummary(...) |
Hibernate 配置
spring:
jpa:
open-in-view: false # Critical!
properties:
hibernate:
jdbc.batch_size: 50
order_inserts: true
order_updates: true
default_batch_fetch_size: 20
generate_statistics: ${HIBERNATE_STATS:false}
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
leak-detection-threshold: 60000
故障排查
常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| N+1 查询 | 在循环中使用延迟加载 | JOIN FETCH、EntityGraph |
| LazyInitException | 会话已关闭 | DTO 投影 |
| 查询缓慢 | 缺少索引 | EXPLAIN ANALYZE |
| 连接泄漏 | 未使用 @Transactional | 添加注解 |
调试属性
spring.jpa.show-sql=true
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.orm.jdbc.bind=TRACE
hibernate.generate_statistics=true
调试检查清单
□ Enable SQL logging
□ Check query count per request
□ Verify fetch strategies
□ Review @Transactional
□ Check connection pool
用法
Skill("java-jpa-hibernate")
相关技能
java-performance- 查询优化java-spring-boot- Spring Data
评论
支持 Markdown