요즘 회사에서 ibatis로 이루어진 쿼리문을 querydsl로 포팅하는 작업을 하고 있다.
포팅하면서 자주 겪었던 오류와, 테이블에 alias 붙이는 법을 정리하려고 한다.




org.springframework.dao.InvalidDataAccessApiUsageException: Unsupported expression [내가 작성한 쿼리문]



오류내용은 바로 이거였다.
처음에는 InvalidDataAccessApiUsageException 이걸로 검색했는데,
@Transactional을 메소드 위에 명시하라는 등의
나와는 관련 없는 해결방법들만이 나왔다.

그래서 다시 Unsupported expression 으로 재검색!
그랬더니 해결방법이 나왔다.
바로 alias 를 붙여주면 된다!! ㅎㅎ
[내가 작성한 쿼리문]이 querydsl 내에서 표현하기가 어려워서,
쿼리문 자체를 stringTemplate으로 만들어서 사용했는데
쿼리가 매핑될 속성을 지정해주지 않아서 생기는 문제라고 한다.
그래서 뒤에 .as()로 alias를 붙여줬더니 오류가 해결됐다ㅎㅎ





신나게 포팅을 하던 도중 어떻게 해야할지 난감한 부분이 생겼다.
alias를 .as()로 붙이는 것까진 알겠는데,
테이블에 alias를 붙인 후, 그 alias만으로 쿼리를 사용하는 부분이 어려웠다.

QTbtable a = QTbtagle.tbTable;




위 방식대로 Q테이블로 만들어서 하자니,
oracle 쿼리문으로 뽑아서 보면 기존 테이블 이름대로만 나온다…ㅠㅠㅠ
그래서 열심히 검색을 해보니, Q테이블로 만들어서 하는데 약간 다른 방법이었다.

QTbtable a = new QTbtable("A");




생각보다 너무 간단하고 편하다…!!
저렇게 한 뒤, 변수 a로 열심히 사용하면
oracle 쿼리문으로 뽑아서 볼 때는 간지나게 A라는 별칭으로 나온다.
.as()로는 별칭 사용이 조금 난감할 때, 위의 방법을 사용하면 된다!