From spring-boot
Implements Spring Boot 4 DDD data layer with JPA/JDBC aggregates, Spring Data repositories, transactional services, projections, auditing, EntityGraph for N+1 prevention, and Boot 4 features like JSpecify and AOT.
How this skill is triggered — by the user, by Claude, or both
Slash command
/spring-boot:spring-boot-data-dddThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Implements DDD tactical patterns with Spring Data JPA and Spring Data JDBC in Spring Boot 4.
Implements DDD tactical patterns with Spring Data JPA and Spring Data JDBC in Spring Boot 4.
| Choose | When |
|---|---|
| Spring Data JPA | Complex queries, existing Hibernate expertise, need lazy loading |
| Spring Data JDBC | DDD-first design, simpler mapping, aggregate-per-table, no lazy loading |
Spring Data JDBC enforces aggregate boundaries naturally—recommended for new DDD projects.
See WORKFLOW.md for detailed step-by-step instructions with code examples.
See EXAMPLES.md for complete working examples including:
@NullMarked and @Nullable annotationsjakarta.* namespaceList<T> instead of Iterable<T>New repository interface returning List<T> for better API ergonomics:
// OLD: CrudRepository returns Iterable<T>
public interface UserRepository extends CrudRepository<User, Long> {
Iterable<User> findAll(); // Requires conversion to List
}
// NEW: ListCrudRepository returns List<T>
public interface UserRepository extends ListCrudRepository<User, Long> {
List<User> findAll(); // Direct List return
List<User> findAllById(Iterable<Long> ids); // Also List
}
// Can also extend both for full functionality
public interface UserRepository extends
ListCrudRepository<User, Long>,
ListPagingAndSortingRepository<User, Long> {
}
Benefits: No more StreamSupport.stream(iterable.spliterator(), false).toList() conversions.
| Need | Skill |
|---|---|
| DDD concepts and design | domain-driven-design |
| REST API for aggregates | spring-boot-web-api |
| Module boundaries | spring-boot-modulith |
| Repository testing | spring-boot-testing |
| Anti-Pattern | Fix |
|---|---|
FetchType.EAGER on associations | Use LAZY + @EntityGraph when needed |
| Returning entities from controllers | Convert to DTOs in service layer |
@Transactional on private methods | Use public methods (proxy limitation) |
Missing readOnly = true on queries | Add for read operations (performance) |
| Direct aggregate-to-aggregate references | Reference by ID only |
| Multiple aggregates in one transaction | Use domain events for eventual consistency |
repository.save() before events dispatch@DataJpaTest — Use TestEntityManager for setupnpx claudepluginhub joaquimscosta/arkhe-claude-plugins --plugin spring-bootGuides Domain-Driven Design for complex business systems: defines bounded contexts, structures domain models, designs aggregates/entities/value objects, chooses monolith vs microservices.
Rules and guidelines for Spring Data JDBC entity mapping, repositories, aggregates, and associations. Activates on @Table, @MappedCollection, AggregateReference, and JDBC repository queries.
Implements Clean Architecture, Hexagonal Architecture (Ports & Adapters), and DDD patterns in Java 21+ Spring Boot 3.5+ apps for layered structures, domain-framework separation, ports/adapters, entities/value objects/aggregates, and monolith refactoring.