inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

질문있습니다. Jpa와 Mongo QueryDSL 같이 설정하는 법

1395

래셔널
0

현재 프로젝트를 진행하면서 한 프로젝트에 JPA(RDB:mysql), Mongo(Mongo)를 같이 쓰고 있는 중입니다.

다름이 아니라 Mongo도 QueryDSL이 있는 것을 파악하고 pom.xml에 build될 때 @Document가 있는 클래스도 Q클래스가 생성될 수 있도록 하려고 합니다.

<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl.version}</version>
</dependency>

<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-mongodb</artifactId>
<version>${querydsl.version}</version>
</dependency>

<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<artifactId>javassist</artifactId>
<groupId>org.javassist</groupId>
</exclusion>
</exclusions>
</dependency>
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processors>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
<processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
</plugin>

이렇게 하니 maven clean & compile을 수행하니, 

error: Attempt to recreate a file for type 들이 쭉 뜨고,

error: cannot find symbol Q클래스들을 찾을 수 없다고 쭉 뜹니다. 

그리고서 Q클래스가 제대로 생성되지 않은채로 빌드가 끝납니다.

혹시 Jpa QueryDSL, Mongo QueryDSL을 함께 쓰시는 법을 아시나요?

mongo jpa querydsl pom.xml

답변 2

0

김영한

안녕하세요. 래셔널님

제가 Querydsl Mongo를 사용해보지 않아서 이 부분은 저도 잘 모르겠습니다.

혹시 아시는 분 있으면 답변 부탁드립니다.

감사합니다.

0

Jeck Joy

보완질문..

https://taekwang.tistory.com/25

위 블로그를 보고 mysql querydsl 이 이미 설정된 프로젝트에 적용해 봤는데

질문자 처럼 문제가 발생합니다.

maven generate-source를 해주면 다시 동적클래스가 생성되긴 하는데,

소스 수정할때 마다 다시 빌드되면서 mysql 쪽 Q 클래스가 삭제되고 mongodb의 Q클래스가 생성됩니다.

mavne 에서 mysql querydsl plugin execution과 mongodb의 querydsl plugin execution 이

시간차를 두고 간섭이 있는것 같은데,

관련 설정이나 대응방법을 못찾겠네요. ㅠ.ㅠ

 

도와주실 분 없을까요...

0

Jeck Joy

(임시방편)

mysql과 mongodb 두가지의 querydsl 설정과정에서

[pom.xml 설정]
maven build plugin의 execution 설정으로
generated-sources/java 경로에 동적클래스를 생성하도록 적용하면

[결과]
소스 수정 등의 빌드를 실행할 때, 두번째 execution 을 수행하며
앞서 생성한 동적클래스를 삭제하는듯 합니다.

  • 다시 프로젝트의 Run As 에서 maven generate-sources 를 실행하면 다시 동적쿼리를 생성하지만, 비정상적인 동작으로 보여지고, 매번 불필요한 작업을 반복할 수 없다고 생각했습니다.

[꼼수 - ecipse]
프로젝트의 properties 속성에서
> Builders > Maven Project Builder 체크해제

소스 수정시 build 과정에서 java, boot 빌드만 진행하여 maven의 generate-sources 미실행
- 동적클래스 삭제하지 않음

* 주의점 : entity, documnet 등의 동적클래스 생성과 관련된 작업을 하실 경우
- Run As > maven generate-sources 를 실행하시면 현행화된 동적 클래스를 사용할 수 있습니다.

[정리]

  1. mwserice properties builder 설정변경
    - mswservice > properties > Builders 화면
    > Maven Project Builder 체크해제

  2. mwserice maven clean
    - mwservice > Run As > 6 Maven clean

  3. mwserice maven generated-source
    - mwservice > Run As > 7 Maven generate-source 수동 실행

  4. mwserice maven install
    - mwservice > Run As > 8 Maven install

  • 어떻게든 pom.xml 이나 소스로 동적클래스 삭제현상을 극복해보려 했으나,
    식견이 부족하여 꼼수로 대체하고 있습니다.
    관련해서 좀 더 세련된 대응법을 아시면 부디 공유 부탁드립니다.

스프링 백엔드 개발 로드맵

0

469

1

부트스트랩 유료화

1

440

2

H2 대신 mysql 등 다른 DB를 사용하시는 분들 중 Error creating bean with name 'entityManagerFactory' 에러가 나는 경우

0

431

0

강의 외 질문: 현시점의 querydsl (jOOQ vs Querydsl)

0

8554

2

jpql 무차별 사용에 대해

0

564

1

'스프링 완전 정복' 로드맵을 함께 위한 Java 지식의 정도

1

408

1

섹션 4 어떻게 변경할 것인가? 관련해서 질문드립니다

0

375

0

프로젝션 사용 이유

0

546

1

학습 방법

1

466

1

현재 공부방향이 괜찮은지 궁금합니다

1

563

1

강의 질문 드립니다.

0

575

1

데이터베이스 스키마에 대해 궁금한게 있어요

1

447

1