ワンクリックで
spring-data-jpa
Spring Data JPA and Hibernate patterns for entities, repositories, and query performance
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Spring Data JPA and Hibernate patterns for entities, repositories, and query performance
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | spring-data-jpa |
| description | Spring Data JPA and Hibernate patterns for entities, repositories, and query performance |
| keywords | ["spring-data-jpa","jpa","hibernate","entity","repository","query","jpql","criteria","lazy loading","fetch join","transaction"] |
| filePatterns | ["*.java","application.yml","application.properties"] |
| frameworks | ["spring-data-jpa","jpa","hibernate"] |
| tokenCount | 3200 |
| version | 1.0.0 |
Spring Data JPA and Hibernate patterns for efficient data access. Optimize queries before optimizing code.
Read only files relevant to the request. Use the content map to focus.
| File | Description | When to Read |
|---|---|---|
entities.md | Entity design, relationships | Modeling |
repositories.md | Derived queries, custom JPQL | Repository layer |
optimization.md | N+1, batch fetching, projections | Performance |
transactions.md | @Transactional and isolation | Transaction management |
@Entity
@Table(name = "users", indexes = {
@Index(name = "idx_users_email", columnList = "email", unique = true)
})
public class User {
@Id
private String id;
@Column(nullable = false, unique = true)
private String email;
@Enumerated(EnumType.STRING)
private UserStatus status;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private List<UserRole> roles = new ArrayList<>();
}
public interface UserRepository extends JpaRepository<User, String> {
Optional<User> findByEmail(String email);
@Query("""
SELECT u FROM User u
LEFT JOIN FETCH u.roles r
WHERE u.status = :status
""")
List<User> findByStatusWithRoles(@Param("status") UserStatus status);
}
@EntityGraph(attributePaths = {"roles", "roles.role"})
List<User> findByStatus(UserStatus status);
// Or use batch fetch size
// spring.jpa.properties.hibernate.default_batch_fetch_size=100
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
@Transactional(readOnly = true)
public Optional<User> findById(String id) {
return userRepository.findById(id);
}
@Transactional
public User create(User user) {
return userRepository.save(user);
}
}
| Anti-Pattern | Why Bad | Better Approach |
|---|---|---|
| EAGER by default | Performance issues | Lazy + explicit fetch |
| Entity as DTO | Overfetching | Projection/DTO |
| @Transactional on class | Leaky scope | Per-method |
| Need | Skill |
|---|---|
| Core Spring patterns | @[skills/spring-boot-patterns] |
| Testing | @[skills/spring-testing] |
Core Java patterns, modern Java features (JDK 17+), best practices
Maven and Gradle build tools, dependency management, multi-module projects
JUnit 5 testing patterns with Mockito and AssertJ
Spring Boot 3 patterns for controllers, services, configuration, and validation
Spring Security 6 patterns for authentication, authorization, and OAuth2
Spring Boot testing with @SpringBootTest, MockMvc, and Testcontainers