버전 업으로 인한 QuerydslJpaRepository 의 Deprecated
- 의존, 플러그인 설정 maven compile 에 의한 자동생성 클래스는 동일하다.
- @NoRepositoryBean 을 가진 JpaRepository 상속 인터페이스 설정도 동일
@NoRepositoryBean
public interface MyCommonRepository<T, Id extends Serializable> extends JpaRepository<T, Id> {
boolean contatins(T entity);
}
- 기본 커스텀 리포지토리 구현 클래스 설정과 등록은 같으나 상속 구조는 SimpleJpaRepository 를 사용.
public class MyCommonRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRepository<T,ID> implements MyCommonRepository<T, ID> {
private EntityManager entityManager;
public MyCommonRepositoryImpl(JpaEntityInformation<T, ?> entityInformation, EntityManager entityManager) {
super(entityInformation, entityManager);
this.entityManager = entityManager;
}
@Override
public boolean contatins(T entity) {
return entityManager.contains(entity);
}
}
@SpringBootApplication
@EnableJpaRepositories(repositoryBaseClass = MyCommonRepositoryImpl.class)
public class JpaApplication {
public static void main(String[] args) {
SpringApplication.run(JpaApplication.class, args);
}
}
- 실제로 사용할 Repository 에 QuerydslPredicateExecutor<Domain> 사용시 에러가 났으나, 자동으로 구현체를 찾아주게 변경되었음.
public interface PostRepository extends MyCommonRepository<Post, Long>, QuerydslPredicateExecutor<Post> {
}
테스트 코드가 잘 작동함.
@Test
@Rollback(false)
public void testQueryDsl(){
Post post = new Post();
post.setTitle("Hibernate");
postRepository.save(post);
QPost qPost = QPost.post;
Predicate predicate = qPost.title.containsIgnoreCase("Hi");
Optional<Post> one = postRepository.findOne(predicate);
assertThat(one).isNotEmpty();
}
Hibernate:
select
post0_.id as id1_1_,
post0_.content as content2_1_,
post0_.created as created3_1_,
post0_.title as title4_1_
from
post post0_
where
lower(post0_.title) like ? escape '!'
2020-11-17 19:51:11.142 TRACE 9856 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [%hi%]
2020-11-17 19:51:11.155 TRACE 9856 --- [ main] o.h.type.descriptor.sql.BasicExtractor : extracted value ([id1_1_] : [BIGINT]) - [1]
즉, 기본 커스텀 Repository 등록 후 사용할 Repository 에 QuerydslPredicateExecutor<Domain> 만 추가하면 되겠다.
'springframework > Spring Data JPA' 카테고리의 다른 글
Spring Data Common : Web - Domain Class Converter (0) | 2020.11.17 |
---|---|
Spring Data Common : Web 소개 (0) | 2020.11.17 |
Spring Data Common : QueryDSL (0) | 2020.11.17 |
Spring Data Common : Domain Event (0) | 2020.11.17 |
Spring Data Common : 공통 리포지토리 커스터마이징 (0) | 2020.11.16 |