بنقرة واحدة
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] |