오류해결

QClass import가 불가능한 문제

indeep 2024. 4. 16. 09:52
반응형

오랜만에 QueryDSL을 통해 쿼리를 작성하려고 하는데 RefreshToken Entity에서 큐클래스가 임포트 불가능한 문제가 발생했다.

 

다른 Entity에서는

사진처럼 잘 import가 되고 있는데 RefreshToken만 import하면 빨간줄 떴다가 바로 삭제가 돼서 QClass가 없나 싶어서 확인해봤다.

 

분명 QClass는 다 만들어져 있는데?.. 여기서 아차 싶은 부분이 생겼다

대부분 보통 QClass는 build/generated 폴더에 만드는 걸로 알고 있는데 내 코드는 src/main에 생성하도록 지정이 되어 있던 것.

 

근데 여태까지 문제 없이 사용했는데? 이 방법이 진짜 문제가 없는 건지 궁금해지기 시작했다.

 

일단 김영한님도 그렇고 호돌맨님의 인프런 댓글도 확인해본 결과 전부 build/generated에 생성을 권장한다. 

그래서 나도 build.gradle을 일단 수정하는 방향으로 진행했다.

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

clean {                               
	delete file('src/main/generated') 
}

 

다시 캐시를 삭제하고 진행하니

빌드에 제대로 QClass가 생긴 것을 확인할 수 있었다.

 

그리고 다시 import를 진행하려는데

계속 refreshToken이라는 이름으로 생성이 불가능하다고 나온다.

근데 뒤에 1을 붙이니 된다? 뭔가 이미 refreshToken이라는 게 어딘가에 존재하는 것이 분명하다는 생각이 들었다.

 

문제는 RefreshToken QClass에서 발생했다.

public final StringPath refreshToken = createString("refreshToken");       

public static final QRefreshToken refreshToken1 = new QRefreshToken("refreshToken1");

QClass 내부에 보면 이미 refreshToken이라는 이름이 변수로 잡혀있고, 생성을 위한 변수의 이름은 refreshToken1로 잡혀있던 것.

다른 QClass는 문제가 없는데 얘만 왜 이렇게 됐던 것일까?

 

public class RefreshToken {                              
    @Id                                                  
    @GeneratedValue(strategy = GenerationType.IDENTITY)  
    private Long id;                                     
    @ManyToOne(fetch = FetchType.LAZY)                   
    @JoinColumn(name = "member_id")                      
    private Member member;                               
    @Column(nullable = true, length = 200)               
    private String accessToken;                          
    @Column(nullable = true, length = 200)               
    private String refreshToken;                         
    private LocalDateTime expireDate;

문제는 Entity 필드가 문제가 됐던 것이라 판단된다.

 

필드의 이름도 refreshToken이라는 이름이 있고, Entity의 이름도 동일하기에 QClass를 생성하면서 문제가 발생하는 것이다. 이 부분까지 생각해서 이름을 지었어야 했었다...

 

우선 import를 할 때 refreshToken1로 사용하는 걸로 진행해야겠다.

반응형