Agent Skills: 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)

UncategorizedID: hoangnguyen0403/agent-skills-standard/spring-boot-data-access

Install this agent skill to your local

pnpm dlx add-skill https://github.com/HoangNguyen0403/agent-skills-standard/tree/HEAD/skills/spring-boot/spring-boot-data-access

Skill Files

Browse the full folder contents for spring-boot-data-access.

Download Skill

Loading file tree…

skills/spring-boot/spring-boot-data-access/SKILL.md

Skill Metadata

Name
spring-boot-data-access
Description
"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)"

Spring Boot Data Access

Priority: P0

Configure JPA and Spring Data

  • Read-Only: Default to @Transactional(readOnly = true) on Services to optimize DB resources.
  • Projections: Use Java Records for Read-Only query results. Avoid fetching full @Entity objects when not necessary.
  • Pagination: ALWAYS use Pageable and Slice (or Page) to prevent loading massive datasets.
  • Spring Data: Prefer JpaRepository and Query methods. Use @Query with JPQL for complex logic. Use Flyway or Liquibase for migrations; never use ddl-auto=create in production.

See implementation examples for repository projections, EntityGraph, and transactional patterns.

Optimize Queries and Transactions

  • N+1 Problem: Fix N+1 selects using JOIN FETCH (JPQL) or @EntityGraph.
  • Open-In-View: Set spring.jpa.open-in-view=false in application.yaml.
  • Bulk Operations: Use @Modifying with @Query for updates/deletes to bypass EntityManager overhead.
  • Connection Pool: Configure HikariCP with explicit maximum-pool-size. Tune Hikari pool-size based on expected concurrent queries.

Anti-Patterns

  • No N+1 Selects: Use JOIN FETCH or @EntityGraph instead of lazy-loading in loops.
  • Entity Inflation: Don't use @Data (Lombok) on Entities as it breaks Proxy and hashCode/equals performance.
  • Transactional Leak: Don't put @Transactional on public Repository methods if the Service is already transactional.
  • Raw SQL: Avoid native SQL unless JPQL/Criteria API is insufficient.

References