JPA
-
QueryDsl where 조건에서 stringtemplate 사용하자JPA 2021. 7. 14. 20:00
몇 년 전에 querydsl을 사용하고 나서 해당 연산을 어떻게 해야 하는지 시행착오가 좀 있었는데 최근에 같은 팀원분이 어떻게 해야 되는지 물어봐서 다른 사람들도 모를 수 있겠구나 하고 글을 적어본다 보통 querydsl에서 비교를 할 때 우리는 다음과 같이 한다 LocalDateTime createDate = LocalDateTime.now(); 생략 .where( qOrderSheet.createDate.gt(createDate) ); qOrderSheet.createDate.gt(createDate)처럼 칼럼에다 주어진 값을 전달해서 같은지 큰지 적은 지 등등 비교를 한다 하지만 위와 같은 작업으로만 다 될 수 있는 것은 아니다 만약 아래와 같이 하고 싶다면? .where( qOrderSheet...
-
spring batch에서 JPASQLQuery를 사용한 이유JPA 2021. 4. 5. 22:18
querydsl 객체들에 대한 자세한 설명은 아래 링크를 참조하자 해당 글은 제가 왜 batch에서 JPASQLQuery를 사용했는지에 대한 그냥 생각을 정리한 것이다 http://ojc.asia/bbs/board.php?bo_table=LecJpa&wr_id=341 Querydsl 입문, 장점, Querydsl의 종류, 구문, SQLQuery, SQLQueryFactory, JPAQuery, JPAQueryFactory, Q 타입클래스 생 Querydsl 입문, 장점, Querydsl의 종류, 구문, SQLQuery, SQLQueryFactory, JPAQuery, JPAQueryFactory, Q 타입클래스 생성3장. Querydsl 입문Querydsl은 미리 작성한 쿼리타입 클래스를 사용해서 쿼리를..
-
Spring Batch with QuerydslItemReaderJPA 2020. 5. 2. 12:06
무신사 java 개발팀에서는 다양한 배치 작업을 하고 있는데요 spring batch를 사용하여 배치 작업을 하고 있습니다 저희는 database에 접근하기 위해서 querydsl을 사용하고 있는데요 spring batch에서 querydsl을 지원해주고 있지 않습니다. 그래서 어쩔수 없이 작년에 코드를 만들었는데요 생각 보다 간단합니다. 필요하신 분들이 계실 것 같아서 공유하도록 하겠습니다. 저희가 실제로 실무에서 사용하고 있는 코드이기도 합니다만 기본 샘플이니 수정할 게 있다면 수정해서 사용해주세요! package com.musinsa.batch.customreader; import com.musinsa.config.db.JpaSqlCustomQuery; import org.apache.commons..
-
QueryDsl from subquery와 join을 해보자!JPA 2019. 9. 3. 22:33
php에 있는 batch query를 java로 마이그레이션 하는 작업중에 있다 휴ㅎㅎ그냥 mybatis를 사용했다면 정말 쉽게 할 수 있는것이지만 오늘도 애를 먹은 경험을 공유하고 싶어서 글을 쓴다. 위와 같은 예제 쿼리를 실했시켰더니 내가 생각한대로 결과가 나오겠지 하는 기대와 달리 다른 쿼리 결과가 생성되었다. 분명 union all한 쿼리를 묶어서 goods 와 join을 해야 하는데 조인을 하지 않았다. 사실은 맨 처음에는 SQLExpressions.union()를 사용했었는데 ExpressionUtils.as 에러가 발생하여서 jpasqlQuery 참조변수의 unionAll을 사용하였다. qGoods를 조인하는 부분을 제거 하고 from도 제거하고 unionAll만 셋팅해서 sql을 날려 보았..
-
QueryDsl - Date 작성시 Expressions.dateTemplate를 사용하자!JPA 2019. 9. 3. 22:20
사실 꼭 그렇지 않지만 나는 entity로 생성된 Q파일의 DateTimePath type은 Expressions.dateTemplate을 사용하는 것을 선호한다 그 이유는 예제를 보자. 전체 쿼리를 보여주면 오히려 복잡할 것 같아 짤라서 첨부했습니다. updDm은 DateTimePath이다 그래서 비교 대상은 날짜 관련 객체만 올 수 있다. 그래서 나는 처음에는 생각 없이 저렇게 사용 하였다. updDm의 값은 값은 이러하다. 그리고 querydsl을 실행하였더니.... 조회 결과가 362066건이 나와버렸다... 분명 이렇게 나올 수 없는 건수였는데 그래서 바인딩 된 값을 확인하였더니 Wed Jan 23 09:22:21 KST 2019 updDm값이 저렇게 바인딩 되었다. 58만개에서 줄긴? 줄었다ㅋ..
-
QueryDsl QuerydslRepositorySupport에서 group_concat사용하기!JPA 2019. 9. 1. 22:22
QuerydslRepositorySupport을 사용해서 querydsl을 사용하면 내부적으로 HqlTemplates를 사용하게 된다 참고로 QuerydslRepositorySupport이 아닌 다른 방식으로 querydsl을 사용할 경우에는 db에 맞게 template를 지정해 줄 수 있다 group_concat을 사용하려고 했을 때 No pattern found for GROUP_CONCAT; 에러가 발생하였다. 그래서 이유를 찾아보았더니 HQLTemplates로 인식한다 그래서 내가 templates를 선택할 수 있는 방법이 있을까 해서 소스를 더 찾아보았다 Querydsl class 안에 createQuery라는 것이 있었다 그런데...내가 선택 할 수 있는게 없다 hibernate로 계속 찍히고..