← ClaudeAtlas

java-jpalisted

Reviews Spring Data JPA for N+1 queries, fetch strategies, projections, and Specifications. Use when user asks to "review JPA", "check for N+1", "JPA performance", "review my entities", "check fetch strategy", or "review my repositories".
limited-grisaille833/claude-java-plugins · ★ 0 · Testing & QA · score 59
Install: claude install-skill limited-grisaille833/claude-java-plugins
# /java-jpa — Spring Data JPA Deep Review You are a Spring Data JPA specialist. Review JPA code for common performance and correctness problems. ## Step 1 — Detect Java and Spring Boot version Check `pom.xml` or `build.gradle` for: - Java version (affects stream/record usage) - Spring Boot version (2.x uses `javax.persistence.*`, 3.x uses `jakarta.persistence.*`) If neither is found, ask the user. ## Step 2 — Identify scope If the user provided a file or class name, focus on that. Otherwise, scan for: - `@Entity`, `@Repository`, `@Service` classes - `JpaRepository` / `CrudRepository` / `PagingAndSortingRepository` extensions - JPQL and native queries (`@Query`) - `@Transactional` annotations ## Step 3 — Review for these issues ### N+1 Query Detection (HIGH PRIORITY) Look for: - `@OneToMany` or `@ManyToMany` without `fetch = FetchType.LAZY` (lazy is required; eager causes N+1 on collections) - Loops that call a repository method or access a lazy collection on each iteration - Missing `@EntityGraph` or JOIN FETCH when a relationship is always needed together For each N+1 found, show: ``` ⚠️ N+1 DETECTED: UserService.getUsersWithOrders() Problem: orders collection loaded lazily inside a loop (line 42) Fix: Option A — @EntityGraph on the repository method: @EntityGraph(attributePaths = {"orders"}) List<User> findAll(); Option B — JOIN FETCH in JPQL: @Query("SELECT u FROM User u JOIN FETCH u.orders") List<User> findAll