SuperAPI AI Directory

spring-boot-data-access

Data & analytics

View repository

Updated 10-15 22:13

About this skill

Spring Boot Data Access

Priority: P0 (CRITICAL)

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 Service already transactional.
  • Raw SQL: Avoid native SQL unless JPQL/Criteria API insufficient.

References