mcpField
J
java-jpa-hibernate

java-jpa-hibernate

github.com/pluginagentmarketplace开发41615 次安装42 周前更新
代码仓库

关于 java-jpa-hibernate

面向 Java 持久化开发的技能指南,涵盖 JPA、Hibernate 与 Spring Data。重点包括实体设计、查询优化、事务、缓存和问题排查。

主要功能

  1. 01JPA 实体与关系映射
  2. 02Hibernate 查询优化
  3. 03Spring Data 仓库与查询策略
  4. 04事务与锁配置
  5. 05缓存策略与持久化排错

适用场景

  1. 01设计具有实体关系的持久化模型
  2. 02定位并减少 N+1 查询
  3. 03配置事务、锁和缓存
  4. 04排查延迟加载及连接问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-java --skill java-jpa-hibernate

安装后在 Claude Code 中输入/java-jpa-hibernate确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
config.yaml
schema.json
references/
GUIDE.md
PATTERNS.md
scripts/
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