원클릭으로
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 직업 분류 기준
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
| 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] |