← ClaudeAtlas

jpa-patternslisted

JPA/Hibernate patterns and common pitfalls (N+1, lazy loading, transactions, queries). Use when user has JPA performance issues, LazyInitializationException, or asks about entity relationships and fetching strategies.
decebals/claude-code-java · ★ 599 · AI & Automation · score 82
Install: claude install-skill decebals/claude-code-java
# JPA Patterns Skill Best practices and common pitfalls for JPA/Hibernate in Spring applications. ## When to Use - User mentions "N+1 problem" / "too many queries" - LazyInitializationException errors - Questions about fetch strategies (EAGER vs LAZY) - Transaction management issues - Entity relationship design - Query optimization --- ## Quick Reference: Common Problems | Problem | Symptom | Solution | |---------|---------|----------| | N+1 queries | Many SELECT statements | JOIN FETCH, @EntityGraph | | LazyInitializationException | Error outside transaction | Open Session in View, DTO projection, JOIN FETCH | | Slow queries | Performance issues | Pagination, projections, indexes | | Dirty checking overhead | Slow updates | Read-only transactions, DTOs | | Lost updates | Concurrent modifications | Optimistic locking (@Version) | --- ## N+1 Problem > The #1 JPA performance killer ### The Problem ```java // ❌ BAD: N+1 queries @Entity public class Author { @Id private Long id; private String name; @OneToMany(mappedBy = "author", fetch = FetchType.LAZY) private List<Book> books; } // This innocent code... List<Author> authors = authorRepository.findAll(); // 1 query for (Author author : authors) { System.out.println(author.getBooks().size()); // N queries! } // Result: 1 + N queries (if 100 authors = 101 queries) ``` ### Solution 1: JOIN FETCH (JPQL) ```java // ✅ GOOD: Single query with JOIN FETCH public interface AuthorRepository extends Jpa