1. Customizing
Interface: Custom Repository
interface CustomizedUserRepository {
void someCustomMethod(User user);
}
Implements: Custom Repository Interface (High Priority)
- postfix: Impl
class CustomizedUserRepositoryImpl implements CustomizedUserRepository {
@Override
public void someCustomMethod(User user) {
// 사용자 정의 구현 내용
}
}
Extends: CrudRepository
interface UserRepository extends CrudRepository<User, Long>, CustomizedUserRepository {
// 기본 CRUD 메서드와 사용자 정의 메서드 선언
}
Extends: SimpleJpaRepository
- 기본 클래스로 작동
- JpaEntityinformation, EntityManager 사용 가능
class MyRepositoryImpl<T, ID> extends SimpleJpaRepository<T, ID> {
private final EntityManager entityManager;
MyRepositoryImpl(JpaEntityInformation<T, ID> entityInformation, EntityManager entityManager) {
super(entityInformation, entityManager);
this.entityManager = entityManager;
}
@Transactional
public <S extends T> S save(S entity) {
// 커스텀 구현 내용
return super.save(entity); // 예시로 기본 save 메서드 호출
}
}
JpaContext
- 도메인 타입을 관리하는 EntityManager 얻음
class UserRepositoryImpl implements UserRepositoryCustom {
private final EntityManager em;
@Autowired
public UserRepositoryImpl(JpaContext context) {
this.em = context.getEntityManagerByManagedType(User.class);
}
// 커스텀 메서드 구현
}
2. Setting
자동 감지
@EnableJpaRepositories(
repositoryImplementationPostfix = "MyPostfix",
repositoryBaseClass=MyRepositoryImpl.class
)
class Configuration { ... }
- (attribute) repositoryImplementationPostfix: Custom Repository Impl 감지
- (attribute) repositoryBaseClass: Custom Repository 기본 클래스 감지
수동 배선
@Qualifier
class MyClass {
MyClass(@Qualifier("userRepositoryImpl") UserRepository userRepository) {
...
}
}
출처
'Spring > Spring Data JPA' 카테고리의 다른 글
[Spring Data JPA] 3-4. Specifications (0) | 2024.08.03 |
---|---|
[Spring Data JPA] 4-1. Spring Data Extensions (1) (0) | 2024.08.02 |
[Spring Data JPA] 3-2. JPA Query Methods (4) (0) | 2024.08.02 |
[Spring Data JPA] 3-2. JPA Query Methods (6) (0) | 2024.08.02 |
[Spring Data JPA] 3-2. JPA Query Methods (3) (0) | 2024.08.02 |