Agent-skills-standard spring-boot-data-access
Optimize JPA, Hibernate, and database interactions in Spring Boot. Use when implementing JPA entities, repositories, or database access in Spring Boot. (triggers: **/*Repository.java, **/*Entity.java, jpa-repository, entity-graph, transactional, n-plus-1)
install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/spring-boot/spring-boot-data-access" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-spring-boot-data-access && rm -rf "$T"
manifest:
skills/spring-boot/spring-boot-data-access/SKILL.mdsource content
Spring Boot Data Access
Priority: P0
Configure JPA and Spring Data
- Read-Only: Default to
on Services to optimize DB resources.@Transactional(readOnly = true) - Projections: Use
for Read-Only query results. Avoid fetching fullJava Records
objects when not necessary.@Entity - Pagination: ALWAYS use
andPageable
(orSlice
) to prevent loading massive datasets.Page - Spring Data: Prefer
andJpaRepository
. UseQuery methods
with JPQL for complex logic. Use Flyway or Liquibase for migrations; never use@Query
in production.ddl-auto=create
See implementation examples for repository projections, EntityGraph, and transactional patterns.
Optimize Queries and Transactions
- N+1 Problem: Fix
selects usingN+1
(JPQL) orJOIN FETCH
.@EntityGraph - Open-In-View: Set
inspring.jpa.open-in-view=false
.application.yaml - Bulk Operations: Use
with@Modifying
for updates/deletes to bypass EntityManager overhead.@Query - Connection Pool: Configure
with explicitHikariCP
. Tune Hikari pool-size based on expected concurrent queries.maximum-pool-size
Anti-Patterns
- No N+1 Selects: Use
orJOIN FETCH
instead of lazy-loading in loops.@EntityGraph - Entity Inflation: Don't use
(Lombok) on Entities as it breaks Proxy and@Data
/hashCode
performance.equals - Transactional Leak: Don't put
on public@Transactional
methods ifRepository
already transactional.Service - Raw SQL: Avoid native SQL unless JPQL/Criteria API insufficient.