spring-data-jpa — скилл для Claude Code: что делает и как установить
Шаблоны и правила для слоя персистентности на Spring Data JPA: создание репозиториев, пагинация, аудит сущностей и настройка транзакций.
npx skills add giuseppe-trisciuoglio/developer-kit --skill spring-data-jpa -a claude-codeЧто делает spring-data-jpa
Скилл даёт ассистенту инструкции по проектированию уровня доступа к данным в приложениях на Spring Data JPA. Внутри собраны правила для наследования JpaRepository, составления производных методов и сложных выборок через @Query, а также примеры безопасного удаления дочерних записей с orphanRemoval.
Инструкции требуют выносить передачу данных в DTO вроде Java-рекордов или классов с @Value, запрещая отдавать сущности JPA напрямую в REST API. Для чтения предписано использовать @Transactional(readOnly = true). Это повод сразу проверить сервисный слой на лишние операции записи, чтобы база данных не держала лишние блокировки.
Отдельный блок посвящён оптимизации. Скилл советует исключать проблему N+1 с помощью @EntityGraph или JOIN FETCH, анализировать тяжёлые запросы через EXPLAIN ANALYZE и избегать случайной фрагментации индексов при использовании UUID в качестве первичных ключей.
Какие задачи решает
- настроить репозитории с JpaRepository и кастомными запросами @Query
- реализовать пагинацию с Pageable и PageRequest
- внедрить аудит сущностей через AuditingEntityListener
- предотвратить проблему N+1 с помощью @EntityGraph
Примеры запросов агенту
- Создай репозиторий ProductRepository с пагинацией и кастомным @Query для выборки по цене
- Настрой сущность Order с полями аудита и связью OneToMany к элементам заказа
Как установить spring-data-jpa
1Через Skills CLI (Vercel)
npx skills add giuseppe-trisciuoglio/developer-kit --skill spring-data-jpa -a claude-code2Вручную: положить файлы
~/.claude/skills/spring-data-jpa/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/spring-data-jpa/
1Через Skills CLI (Vercel)
npx skills add giuseppe-trisciuoglio/developer-kit --skill spring-data-jpa -a codex2Вручную: положить файлы
.agents/skills/spring-data-jpa/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add giuseppe-trisciuoglio/developer-kit --skill spring-data-jpa -a cursor2Вручную: положить файлы
.cursor/skills/spring-data-jpa/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install giuseppe-trisciuoglio/developer-kit spring-data-jpa2Вручную: положить файлы
.github/skills/spring-data-jpa/SKILL.md1Через Skills CLI (Vercel)
npx skills add giuseppe-trisciuoglio/developer-kit --skill spring-data-jpa -a gemini-cli2Командой платформы
gemini skills install https://github.com/giuseppe-trisciuoglio/developer-kit --path plugins/developer-kit-java/skills/spring-data-jpaВручную: положить файлы
.devin/skills/spring-data-jpa/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add giuseppe-trisciuoglio/developer-kit --skill spring-data-jpa -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора93
Похожие
Рядом в теме «Бэкенд и API»
Всё по теме «Бэкенд и API» →Вопросы о spring-data-jpa
Как установить spring-data-jpa в Claude Code?
Выполните команду npx skills add giuseppe-trisciuoglio/developer-kit --skill spring-data-jpa -a claude-code. Также можно вручную сохранить файл по пути ~/.claude/skills/spring-data-jpa/SKILL.md.
Что делает скилл spring-data-jpa?
Скилл задаёт правила генерации сущностей, репозиториев, пагинации и транзакций для Spring Data JPA.
Почему скилл запрещает отдавать сущности JPA напрямую в REST API?
Это защищает приложение от ошибок ленивой загрузки при сериализации. Вместо сущностей правила требуют передавать данные через DTO на базе Java-рекордов или @Value.
Исходный текст
SKILL.md · MIT
---
name: spring-data-jpa
description: Provides patterns to implement persistence layers with Spring Data JPA. Use when creating repositories, configuring entity relationships, writing queries (derived and `@Query`), setting up pagination, database auditing, transactions, UUID primary keys, multiple databases, and database indexing.
allowed-tools: Read, Write, Edit, Bash, Glob, Grep
---
# Spring Data JPA
## Overview
Provides patterns for Spring Data JPA repositories, entity relationships, queries, pagination, auditing, and transactions.
## When to Use
Creating repositories with CRUD operations, entity relationships, `@Query` annotations, pagination, auditing, or UUID primary keys.
## Instructions
### Create Repository Interfaces
To implement a repository interface:
1. **Extend the appropriate repository interface:**
```java
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// Custom methods defined here
}
```
2. **Use derived queries for simple conditions:**
```java
Optional<User> findByEmail(String email);
List<User> findByStatusOrderByCreatedDateDesc(String status);
```
3. **Implement custom queries with `@`Query:**
```java
@Query("SELECT u FROM User u WHERE u.status = :status")
List<User> findActiveUsers(@Param("status") String status);
```
### Configure Entities
1. **Define entities with proper annotations:**
```java
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 100)
private String email;
}
```
2. **Configure relationships using appropriate cascade types:**
```java
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Order> orders = new ArrayList<>();
```
**Validation:** Test cascade behavior with a small dataset before applying to production data. Verify delete operations don't cascade unexpectedly.
3. **Set up database auditing:**
```java
@CreatedDate
@Column(nullable = false, updatable = false)
private LocalDateTime createdDate;
```
### Apply Query Patterns
1. **Use derived queries for simple conditions**
2. **Use `@`Query for complex queries**
3. **Return Optional<T> for single results**
4. **Use Pageable for pagination**
5. **Apply `@`Modifying for update/delete operations**
### Manage Transactions
1. **Mark read-only operations with `@`Transactional(readOnly = true)**
2. **Use explicit transaction boundaries for modifying operations**
3. **Specify rollback conditions when needed**
### Validate and Optimize
**1. Verify entity configuration:**
- Test cascade behavior in a transaction before production deployment
- Validate bidirectional relationships sync correctly
**2. Optimize query performance:**
- Run `EXPLAIN ANALYZE` on queries against large tables
- If performance issues detected: add indexes → verify with EXPLAIN → repeat
- Use `@EntityGraph` to prevent N+1 queries
**3. Validate pagination:**
- Ensure indexed columns support pagination queries
- Test with large datasets to verify cursor stability
## Examples
### Basic CRUD Repository
```java
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
// Derived query
List<Product> findByCategory(String category);
// Custom query
@Query("SELECT p FROM Product p WHERE p.price > :minPrice")
List<Product> findExpensiveProducts(@Param("minPrice") BigDecimal minPrice);
}
```
### Pagination Implementation
```java
@Service
public class ProductService {
private final ProductRepository repository;
public Page<Product> getProducts(int page, int size) {
Pageable pageable = PageRequest.of(page, size, Sort.by("name").ascending());
return repository.findAll(pageable);
}
}
```
### Entity with Auditing
```java
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@CreatedDate
@Column(nullable = false, updatable = false)
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
@CreatedBy
@Column(nullable = false, updatable = false)
private String createdBy;
}
```
## Best Practices
### Entity Design
- Use constructor injection exclusively (never field injection)
- Prefer immutable fields with `final` modifiers
- Use Java records (16+) or `@Value` for DTOs
- Always provide proper `@Id` and `@GeneratedValue` annotations
- Use explicit `@Table` and `@Column` annotations
### Performance Optimization
- Use appropriate fetch strategies (LAZY vs EAGER)
- Implement pagination for large datasets
- Use database indexes for frequently queried fields
- Consider using `@EntityGraph` to avoid N+1 query problems
### Reference Documentation
For comprehensive examples, detailed patterns, and advanced configurations, see:
- [Examples](references/examples.md) - Complete code examples for common scenarios
- [Reference](references/reference.md) - Detailed patterns and advanced configurations
## Constraints and Warnings
- Never expose JPA entities directly in REST APIs; always use DTOs to prevent lazy loading issues.
- Avoid N+1 query problems by using `@EntityGraph` or `JOIN FETCH` in queries.
- Be cautious with `CascadeType.REMOVE` on large collections as it can cause performance issues.
- Do not use `EAGER` fetch type for collections; it can cause excessive database queries.
- Avoid long-running transactions as they can cause database lock contention.
- Use `@Transactional(readOnly = true)` for read operations to enable optimizations.
- Be aware of the first-level cache; entities may not reflect database changes within the same transaction.
- UUID primary keys can cause index fragmentation; consider using sequential UUIDs or Long IDs.
- Pagination on large datasets requires proper indexing to avoid full table scans.
© giuseppe-trisciuoglio · MIT · giuseppe-trisciuoglio/developer-kit