처음 회사에서 들어 왔을때 개발 환경 세팅을 하는데 몇가지 문제가 발생했었는데 그중에서 가장 기억에 남았던 부분이 바로 q 파일 설치 관련해서 기억에 남았습니다.
Q 클래스(q 파일)은?
QueryDSL에서 Q-파일은 특정 엔티티에 대한 메타모델을 자동으로 생성된 자바 클래스로 제공합니다. 이러한 파일들은 QueryDSL이 제공하는 타입-세이프한 쿼리 구성을 가능하게 하는 중요한 부분입니다. 이 Q-클래스들을 사용함으로써 개발자는 컴파일 시간에 타입 체크를 받을 수 있으며, IDE의 자동완성 기능을 활용하여 더욱 빠르고 정확하게 쿼리를 작성할 수 있습니다
Q-클래스 또는 Q-파일의 역할
- 메타모델 생성: Q-클래스는 각 엔티티의 속성에 대한 메타데이터를 제공하며, 이를 통해 쿼리를 작성할 때 컴파일 시간에 타입 체크가 가능합니다.
- 타입-세이프 쿼리 작성: 이 클래스들은 쿼리를 작성할 때 변수명이나 타입 오류를 컴파일 단계에서 잡아내어 런타임 에러의 가능성을 줄여줍니다.
- 코드 자동 완성 지원: IDE에서 Q-클래스의 속성을 사용할 때 자동 완성 기능을 제공받을 수 있어 쿼리 작성이 더 빠르고 정확해집니다.
Q-클래스의 생성
QueryDSL은 APT(Annotation Processing Tool)를 사용하여 엔티티 클래스를 기반으로 Q-클래스를 자동 생성합니다. 이 과정은 Maven이나 Gradle과 같은 빌드 도구의 설정을 통해 자동화할 수 있습니다.
ex)
@Entity
public class Book {
@Id
private Long id;
private String title;
private String author;
}
public class QBook extends EntityPathBase<Book> {
public static final QBook book = new QBook("book");
public final NumberPath<Long> id = createNumber("id", Long.class);
public final StringPath title = createString("title");
public final StringPath author = createString("author");
public QBook(String variable) {
super(Book.class, forVariable(variable));
}
}
QBook qBook = QBook.book;
JPAQuery<?> query = new JPAQuery<>(entityManager);
List<Book> books = query.select(qBook)
.from(qBook)
.where(qBook.author.eq("J.K. Rowling"))
.fetch();
여기서 문제가 되었던게 서버가 4개로 나눠져있어서
( A ) <-> ( B ) <-> (C ) <-> (D ) 너무 많아.. ㅠ Q 파일이 가끔 제대로 설치가 안될떄가 있었는데 .. 아직 정확한 원인을 봐야할것같은데 원인을 모르겠다.... ㅠㅠ
에러코드
java: cannot find symbol
symbol: class QWorkFlowInfoEntity
일단 clean 후 install 해서 해결은 했는데 ... 이게 맞는건가 싶다.. 정확한 queryDsl과 q파일에 대해서 더 정확하게 알아야할것같다.
'웹 > QueryDSL' 카테고리의 다른 글
Query DSL 이란? (0) | 2024.04.20 |
---|