본문 바로가기
Spring/Querydsl

[Spring boot 3.0.0 이상] build.gradle 설정

by 행운의나무 2022. 12. 13.
728x90
반응형

현상

Spring boot 3.0.0으로 업데이트 되면서 javax에서 jakarta로 넘어가는 패키지들이 문제를 발생한다.

예를들면, QueryDsl을 위한 설정 파일인 경우 JPAQueryFactory에 entityManager를 넣을 경우 에러가 발생한다.

@Configuration
public class QueryDslConfig {

    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory(){
        return new JPAQueryFactory(entityManager);
    }
}

JPAQueryFactory의 EntityManager의 의존성 폴더는 javax.persistence.EntityManager이기 때문이다.

반응형

해결

build.gralde을 다음과 같이 설정하여 javax 패키지의 어노테이션을 jakarta 버전으로 읽을 수 있도록 변경한다.

buildscript {
   ext {
      queryDslVersion = "5.0.0"
   }
}

plugins {
   id 'java'
   id 'org.springframework.boot' version '3.0.0'
   id 'io.spring.dependency-management' version '1.1.0'
}


group = 'study.walter'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

configurations {
   compileOnly {
      extendsFrom annotationProcessor
   }
}

repositories {
   mavenCentral()
   maven { url 'https://repo.spring.io/milestone' }
}

ext {
   set('springCloudVersion', "2022.0.0-RC2")
}

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
   implementation 'org.springframework.boot:spring-boot-starter-validation'
   implementation 'org.springframework.boot:spring-boot-starter-web'

   // querydsl 추가
   implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta"
   implementation "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta"
   annotationProcessor "jakarta.annotation:jakarta.annotation-api"
   annotationProcessor "jakarta.persistence:jakarta.persistence-api"
   annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"


   compileOnly 'org.projectlombok:lombok'
   developmentOnly 'org.springframework.boot:spring-boot-devtools'
   runtimeOnly 'com.mysql:mysql-connector-j'
   annotationProcessor 'org.projectlombok:lombok'

   testImplementation 'org.springframework.boot:spring-boot-starter-test'
   testImplementation 'io.projectreactor:reactor-test'
}

tasks.named('test') {
	useJUnitPlatform()
}

 

테스트

UserEntity

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Table(name="user")
public class User extends BaseTimeEntity{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //PK생성 규칙. auto_increment부여
    private Long id;

    @Column(name = "name")
    private String name;
}

repository
- querydsl을 이용해 기능을 확장시킨 repository를 생성한다. 
- https://docs.spring.io/spring-data/jpa/docs/2.1.3.RELEASE/reference/html/#repositories.custom-implementations

 

Spring Data JPA - Reference Documentation

Example 100. Using @Transactional at query methods @Transactional(readOnly = true) public interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") v

docs.spring.io

public interface UserRepository extends JpaRepository<User, Long>, UserRepositoryCustom {
}

public interface UserRepositoryCustom {
    List<User> findByNameCustom(String name);
}

@RequiredArgsConstructor
public class UserRepositoryImpl implements UserRepositoryCustom {

    private final JPAQueryFactory jpaQueryFactory;

    public List<User> findByNameCustom(String name){
        return jpaQueryFactory
                .selectFrom(user)
                .where(user.name.eq(name))
                .fetch();
    }

}

테스트

@SpringBootTest
class UserRepositoryCustomImplTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    void get(){
        List<User> userList = userRepository.findByNameCustom("test");

        System.out.println(userList.get(0).getName());
        userList.forEach(
                System.out::println
        );
    }
}

테스트 결과

참고

http://honeymon.io/tech/2020/07/09/gradle-annotation-processor-with-querydsl.html

https://www.inflearn.com/chats/700670/querydsl-springboot-3-0%EC%9D%98-gradle-%EC%84%A4%EC%A0%95%EC%9D%84-%EA%B3%B5%EC%9C%A0%ED%95%A9%EB%8B%88%EB%8B%A4

https://docs.spring.io/spring-data/jpa/docs/2.1.3.RELEASE/reference/html/#repositories.custom-implementations

 

쿠팡으로 연결 클릭

 

제주삼다수 그린 무라벨

COUPANG

www.coupang.com

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

반응형

'Spring > Querydsl' 카테고리의 다른 글

Query DSL 시작하기  (0) 2022.12.12
Query DSL - Dynamic Query  (0) 2022.07.06
Query DSL - Paging  (0) 2022.07.06
Query DSL - CASE  (0) 2022.07.05
Query DSL - Subquery  (0) 2022.07.05