DevBoi

[Jpa] Querydsl build Setting 본문

Develop/[JPA]

[Jpa] Querydsl build Setting

HiSmith 2023. 9. 2. 14:04
반응형

QueryDsl 프로젝트를 빌드할때  오류가 났다. 사유는 Qclass의 중복 생성시도로 인한 오류이다.

아래와 같이 세팅해서 해결했다.

별건아니고 그냥 의존성 주입과 그래들 과정에서 번거롭게 또 삽질 싫어서 남겨둔다.

 

나는 쿼리 팩토리를 별도 빈으로 생성해서 서비스에서 주입 받아서 사용했다.

별도 레포지토리는 비즈니스 로직이 복잡할때만 ...할까 하다가

파일이 많아지면 신규 모듈 개발할때 귀찮아서 우선 서비스에서 끝냈다.

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

group = 'com.boiler.core'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

configurations {
  compileOnly {
    extendsFrom annotationProcessor
  }
  testCompileOnly {
    extendsFrom testAnnotationProcessor
  }
}

repositories {
  //mavenLocal()
  mavenCentral()

  // Spring GraphQl is not released yet, add spring snapshot repo
  maven { url 'https://repo.spring.io/milestone' }
  maven { url 'https://repo.spring.io/snapshot' }
}

dependencies {
  //spring graphql
  //implementation 'org.springframework.boot:spring-boot-starter-graphql'

//  // Jakarta EE 10
//  implementation 'jakarta.persistence:jakarta.persistence-api:3.1.0'
//  implementation 'jakarta.inject:jakarta.inject-api:2.0.1'
//  implementation 'jakarta.annotation:jakarta.annotation-api:2.1.1'

  //Spring Boot
  implementation 'org.springframework.boot:spring-boot-starter-web'

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


  //configure Lombok for compile java/ compile tests
  compileOnly 'org.projectlombok:lombok:1.18.28'
  annotationProcessor 'org.projectlombok:lombok:1.18.28'
  testCompileOnly 'org.projectlombok:lombok:1.18.28'
  testAnnotationProcessor 'org.projectlombok:lombok:1.18.28'

  // QueryDSL for JPA
  implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
  implementation 'com.querydsl:querydsl-apt:5.0.0:jakarta'
  annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
  annotationProcessor "jakarta.annotation:jakarta.annotation-api"
  annotationProcessor "jakarta.persistence:jakarta.persistence-api"
  annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
  implementation 'org.mapstruct:mapstruct:1.4.2.Final'
  //test

  implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
  implementation 'org.springframework.boot:spring-boot-starter-jdbc'
  implementation 'org.mariadb.jdbc:mariadb-java-client:3.1.4'


}
package com.boiler.core.backend.config;

import com.querydsl.jpa.JPQLTemplates;
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

import java.util.function.Supplier;

@Configuration
@EnableJpaRepositories(basePackages = "com.boiler.core")
@RequiredArgsConstructor
public class QuerydslConfig {

  private final EntityManager entityManager;

  @Bean
  public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
    return new JPAQueryFactory(entityManager);
  }
}
@Service
@RequiredArgsConstructor
@Transactional
public class MemberService {
  private final JPAQueryFactory queryFactory;
  private final MemberRepository memberRepository;
  Member  postMember(Member member){
    return memberRepository.save(member);
  }

  public Member getMember(String memberId) {
    return queryFactory.select(member)
      .from(member)
      .where(member.memberId.eq(memberId)).fetchOne();
  }

 

뭐 다른 방법도 많겠지만 우선 이런 틀로 프로젝트 살을 붙이자

반응형

'Develop > [JPA]' 카테고리의 다른 글

[JPA] Querydsl & Paging  (0) 2023.09.02
[JPA] JPAUpdateClause 사용  (0) 2023.09.02
[JPA] ElementCollection  (0) 2023.08.28
[JPA] QueryDsl LeftJoin,SelfJoin  (0) 2023.08.19
[JPA] QueryDsl 여러 기능 정리  (0) 2023.08.19