월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! Querydsl
Querydsl select 쿼리를 이용한 join절 구성 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]QuerydslRepositorySupport를 이용해 페이징 쿼리를 작성중에 있습니다. select 쿼리에서 left join을 사용하고 있습니다. left join 절에 이미 구성하였던 select 쿼리를 넣고 on 절의 조건을 통해 쿼리를 구성하고 싶습니다. .leftjoin() 절내에 select 쿼리를 넣으면 된다고 생각했는데 leftjoin의 alias 명을 어떻게 정의해야 할지 몰라 문의 드립니다. 예) SELECT * FROM Test t1 LEFT JOIN (SELECT name FROM Test2 ) t2 ON t1.id = t2.id위와 같은 형태의 샘플 네이티브 쿼리를 querydsl을 이용해 처리하고 싶습니다. 참고할 만한 가이드가 있는지 문의 드립니다. 감사합니다.
- 미해결실전! Querydsl
멀티쓰레드 환경에서 동시성 문제 발생 하지 않나요?!! 라는거에 대해서.
EntityManger 나 JPAQueryFactory 주입 받을때 "멀티쓰레드 환경에서 동시성 문제 발생하지 않나요? 라고 궁금증이 생길수도 있습니다" 이 궁금증 자체가 왜 생기는지가 궁금합니다! 영한님께서 왜 발생하지 않는지에 대해서는 이해가 갔는데 이것이 문젭니다..
- 미해결실전! Querydsl
5:38초 질문입니다!
5:38 초 부근 member 접근 할때 get 을 쓰면 안된다고 테스트니까 그냥 진행하신다고 하셨는데 이게 어떤의미인지 설명 가능할까요? 한 entity 에 대해서 직접적으로 접근 하기 보다는 dto 같은 전달 객체를 이용해서 가지고 와야 된다. 뭐 이런 뜻인건지 좀더 설명을 듣고 싶어 질문 올립니다!
- 미해결실전! Querydsl
mysql JOIN UPDATE 관련 질문 드립니다 !
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] 안녕하세요 영한님 join update 관련해서 질문드려요 https://www.inflearn.com/questions/24128 위 글을 참고 해서 where 절의 서브쿼리를 사용해서 join update를 사용하였는데요. You can't specify target table '테이블명' for update in FROM clause 라는 에러가 나서 구글링을 해보니 mysql 에서 같은 테이블에서 서브쿼리로 값을 끌어오려고 해서 나는 에러라고 하더라구요. 그래서 from 절을 한번 더 감싸는 방식으로 해결한다고 하는데 그럼 제 생각으로는 from절에 한번 더 서브쿼리를 넣어야 할 것 같은데 from 절에는 서브쿼리를 넣지 못하지 않나요? 우선 네이티브 쿼리로 처리해두긴했는데 다른 해결방법이 있나 궁금해서 질문드립니다. 늘 감사합니다.
- 미해결실전! Querydsl
몇가지 질문드립니다...
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 기초, JPA1,JPA2까지 모두 수강하였지만, 제가 JPA에 대해 실무경험이 없다보니 몇가지 궁금한점이 있어서 문의드립니다... 보통 JPQL, queryDSL를 사용할 수 있을때 JPQL에서 사용하다가 동적으로 사용하기 힘들때만 queryDSL를 보통 사용하나요? 정확히 어느경우에 JPQL를 사용하고 어느 경우에 queryDSL를 사용하면 좋을지 궁금합니다.... 감사합니다..
- 미해결실전! Querydsl
JPAQueryFactory 질문
아래 첨부한 사진 처럼 JPAQueryFactory 에 @Autowired 로 빈등록을 해주었는데 에러가 나왔고 어노테이션을 빼고 영한님께서 하신 필드로 선언을 하니까 테스트가 정상 작동하였습니다. 무슨 이유인지 , 빈등록을 하지 않는 이유가 궁금합니다! @AutowiredEntityManager em;@AutowiredJPAQueryFactory queryFactory;@BeforeEachpublic void testEntity() { queryFactory = new JPAQueryFactory(em);
- 미해결실전! Querydsl
Querydsl 설정 과 빌드 질문 입니다.
영한님 강의에 나오는 other 에 compilequerydsl 을 컴파일 시키면 빌드가 성공하여 성공적으로 Q클래스가 만들어집니다. 그런데 커멘드창에서 gradlew build 를 하면 아래와 같은 에러 메세지가 나옵니다. 결국 배포를 하게 되면 build 를 해야하는데 어떻게 해결 해야할까요? 아래에 에러메세지 와 build.gradle 설정파일 첨부하였습니다 <ERROR 메세지> * What went wrong: Execution failed for task ':compileQuerydsl'. > Compilation failed; see the compiler error output for details. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. build.gradle buildscript { ext { queryDslVersion = "5.0.0" }}plugins { id 'org.springframework.boot' version '2.7.1' id 'io.spring.dependency-management' version '1.0.11.RELEASE' //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java'}group = 'study'version = '0.0.1-SNAPSHOT'sourceCompatibility = '11'configurations { compileOnly { extendsFrom annotationProcessor }}repositories { mavenCentral()}dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' //querydsl 추가 implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" implementation "com.querydsl:querydsl-apt:${queryDslVersion}" //binding parameter 편하게 보기 //운영 할때에는 성능테스트 해보고 추가 implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test'}tasks.named('test') { useJUnitPlatform()}//querydsl 추가 시작def querydslDir = "$buildDir/generated/querydsl"querydsl { jpa = true querydslSourcesDir = querydslDir}sourceSets { main.java.srcDir querydslDir}compileQuerydsl{ options.annotationProcessorPath = configurations.querydsl}configurations { compileOnly { extendsFrom annotationProcessor } querydsl.extendsFrom compileClasspath}//querydsl 추가 끝
- 미해결실전! Querydsl
연관관계 save 관련하여 질문드려요 !
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 ! 수업 완강 후, 사이드 프로젝트 진행중에 궁금한점이 생겨 질문드립니다 1:n 양방향 연관관계 에서 n쪽을 save하려는데 이슈가 발생했는데요. 우선 1:n을 Team : Member 라고 가정하고 팀은 기존에 생성해둔 데이터가 있습니다. 화면에서 팀의 대한 id값과 추가할 멤버 정보를 서버로 넘기면 서버에서 아래처럼 dto를 entity로 변환하고 Member member = new Member();member.setName(memberDto.getName());Team team = new Team();team.setId(memberDto.getTeamId());member.setTeam(team);memberRepository.save(member); save 를 실행해서 제가 원하는 결과값은 member만 insert가 되는 것인데 에러가 나더라구요. 구글링을 해서 찾아보니 cascade 를 ALL 로 주라고 하여서 실행해보면 Team table에도 정보가 같이 입력되는것을 확인했습니다. 하여 제 생각에는 id값 만으로는 기존 Team을 특정할수가 없어서 그런건가 싶어서 해결한 방식은 화면에서 id값을 넘겼을때 해당 id값으로 Team 정보를 조회하고 해당 정보를 아래처럼 세팅하여 저장하였습니다. Member member = new Member();member.setName(memberDto.getName());member.setTeam(team); // id값으로 조회한 team 을 넘겨서 세팅 memberRepository.save(member); 이렇게 원하는 결과값을 얻어 해결은 하였는데 과연 이게 맞는 방법인가 싶어서 질문드려요 id값 만으로 자식 인자를 insert하면 될줄 알았는데 꼭 부모값 조회가 한번은 필요한 것인지 해서요 제가 잘 알지 못해서 이게 맞는 방법인것인지 아니면 방법이 있는데 모르는 것인지 궁금합니다 ! 답변 부탁드립니다 ! 감사합니다
- 미해결실전! Querydsl
쿼리 데이터 조회가 안됩니다 ㅠㅠ..
비슷한 예제로 계시판을 하나 만들었는데, 콘솔에 나온 쿼리로 db에 쿼리 조회를 하면 조회가 되는데 콘솔에서는 값이 null이라고 나오네요 ㅠㅠ.. 뭔지 모르겠습니다 ㅠㅠ..
- 미해결실전! Querydsl
postgresql 쿼리를 dsl 에서 사용시 질문 드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]postgresql 쿼리문을 dsl 을 통해 사용하려 합니다. group by 를 사용하여 해당 기준에 따른 특정 컬럼의 데이터를 array_agg를 통해 받아오려면 어떻게 해야할까요?
- 미해결실전! Querydsl
@Test에 containsExactly 질문입니다
안녕하세요 test할 때 사진에 containsExactly가 에러가 나더라구요 assertThat(result).extracting("username").containsExactly("teamA", "teamB") 전에 이렇게도 쓰셨는데 이거도 안되구요ㅠㅠ 혹시 대안으로 쓸 수 있는 방법이 있는지 알려주시면 감사하겠습니다!
- 미해결실전! Querydsl
안녕하세요 querydsl의 의존 범위에 대한 질문입니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 영한님 현재 querydsl을 사용하여 where 조건이 복잡한 동적 쿼리를 구현중입니다. 현재 구현중인 기능에 데이터 조회를 하는 조건을 관리하는 기능이 있어서 조건을 데이터베이스에 저장하고 데이터베이스에서 조건을 가져와서 repository에서 BooleanBuilder로 각 조건을 조합하여 쿼리를 날리고 있습니다. 제가 궁금한건 Entity에서 어차피 조건을 가지고 있으니 Entity에서 바로 BooleanExpression을 만들어 repository로 전달해주는게 어떤가 하는 생각입니다. 그런데 이렇게 Entity에서 바로 BooleanExpression을 반환하자니 querydsl 의존이 domain에 걸리는거 같아서 조금 걱정입니다. 영한님은 Entity나 DTO가 queryDsl 객체에 의존을 가지는 것에 대해서 어떻게 생각하시나요.?
- 미해결실전! Querydsl
entity와 DTO의 join
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 영한님 jpa 로드맵을 수강하고 사이드프로젝트를 진행중인데요. 제목과 같이 entity 와 dto를 join할수 있는지 궁금합니다. 구체적으로 설명해보자면 우선 1. open api를 통해서 List<T> 를 DTO로 받아서(ex, 상품 list) 사용자가 상품을 좋아요 누른 데이터를 DB에 저장해두었습니다.(member idx 와 상품 idx 저장) open api 에서 받은 데이터는 따로 DB에 저장하지 않고 호출시마다 DTO로 응답하는데요. 2. 여기서 당연하게도 open api에서 받은 list에는 사용자의 좋아요가 담겨 있지 않기때문에 DB에서 사용자가 좋아요 누른 상품 list를 조회 후에 open api 에서 받은 list 를 돌며 좋아요 데이터를 추가해주고 있습니다. 혹시 2번처럼 진행하지않고 DB에서 사용자 좋아요 누른 상품(entity)을 open api 에서 받은 데이터(DTO)와 join 하는 방법은 없을까요? 설명이 부족하다면 말씀 부탁드립니다 ! 감사합니다.
- 미해결실전! Querydsl
querydsl(JPA) 성능질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. SPRING, JPA 강의를 진행중입니다. 해당강의 (Querydsl)한정 질문이 아니라 조심스럽습니다만.. 혹시 문제되면 나누어 강의컨셉에 맞는곳에 나누어 질문 올리도록하겠습니다.1. Query vs Spring(application)실무를 진행하고있지만...어떤 정보를 쿼리로 뽑아와야하고, 애플리케이션 단계에서 어느정도로 가공해야할지 그 기준에 대해 명확하게 정하지 못하는것 같습니다. 예를들어 "작년 한 해 동안의 주문내역중에 주문상태가 "완료"인것과 "취소"인것 두가지가 필요하다 했을때에,이두가지를 각각 쿼리로 바로 뽑아내야할지, 아니면 작년한해동안의 주문내역의 주문상태를 조회해서 서비스단에서 나뉘어야 할지...이 예시는 단순한 예시라 후자가 낫다는 판단이 되긴하는데, 실무에서는 좀더 복잡한부분이 있는것같아요. 혹시 참고할만한 가이드 같은게 있을까요? 한마디로 쿼리의 비용이 큰가요? 서비스단의 처리비용이 큰가요? 2. Where절 파라미터 vs 스프링 Filter1번 질문과 약간 중복되는 부분이 있는것같습니다. 쿼리에서 바인딩되는 파라미터의 개수가 성능에 영향을 미치나요? (많을수록 느려지는것 같아서요..)특정 조건에 맞는 데이터를 조회하고싶을때 아래 두가지 경우중 어느게 더 좋은 방법인가요?- where절에 .eq() 이런것들을 사용해서 조회- SELECT 절에 조건절에 사용하는 컬럼을 조회하고, 스프링단에서 stream().filter()로 해서 조회 3. QueryDsl의 Totalcount쿼리.해당강의에서 페이징쿼리 강의내용중 집계쿼리를 따로 작성하는 부분이 있습니다.페이징쿼리를 수행했을때, total카운트와 함께 특정 컬럼이 조건에 만족하는 것을 따로 집계한 카운트도 반환하고 싶습니다.예를들어 주문내역100건을 조회했을때 페이징쿼리로 20건씩 조회하는데주문내역 (진행중인건 82건/총 100건) <- 이데이터가 필요할때 "진행중인 건"에 대한 집계를 하고싶습니다.이경우 진행중인건에 대한 쿼리를 한번더 요청하는수밖에없나요? (카운트쿼리1, 집계쿼리1, 추가집계쿼리1 => 총3회 쿼리)아니면 추가 쿼리 없이 카운트쿼리의 select절에 "상태"컬럼을 추가해서 처리할 수 있는 방법이 있나요? (총2회 쿼리
- 미해결실전! Querydsl
jpa 질문은 아닌데...
GetMapping 으로 컨디션 객체를 매개변수로 받게 해놓고 쿼리스트링에 그 해당하는 객체의 필드명으로 데이터를 넘기면 자동으로 처리되는 건가요?스프링부트에서 해당기능을 제공하는건지 궁금합니다.
- 미해결실전! Querydsl
QHello.java 파일 임포트
maven 프로젝트 입니다. 기존 작업할땐 어떻게 어떻게 설정해서 테스트코드 돌려봤습니다. 깃으로 커밋후 다른컴퓨터 작업을하니 파일이 활성화가 안되고 임포트도 안됩니다. 무슨문제죠? 검색을 해도 해결이 안됩니다.
- 미해결실전! Querydsl
order by 의 동적 정렬에 대한 질문입니다.
동적 정렬을 하고 싶은데요. 원하는 결과는 1. 한글 (오름차순, 내림차순) 영어 숫자 내림차순 오름차순 2. 영어 (오름차순, 내림차순 ) 한글 숫자 내림차순 오름차순 입니다. JPAQuery<User> content = query.selectFrom(user) .where( searchQueryCustom(keyword, search), getIn(userIdListFilterByLanguage) ).orderBy(getSorting(pageable), getDirectionByName(pageable)); private OrderSpecifier<Integer> getSorting(Pageable pageable) { for (Sort.Order order : pageable.getSort()) { Order direction = order.getDirection().isAscending() ? Order.ASC : Order.DESC; switch (order.getProperty()) { case "email": return new OrderSpecifier(direction, user.email); case "sortKorean": return new OrderSpecifier(direction, new CaseBuilder() .when(user.name.between("가", "힣")).then(1) .when(user.name.between("a", "Z")).then(2) .otherwise(3)); case "sortEnglish": return new OrderSpecifier(direction, new CaseBuilder() .when(user.name.between("a", "Z")).then(1) .when(user.name.between("가", "힣")).then(2) .otherwise(3)); } } return null;}private OrderSpecifier<?> getDirectionByName(Pageable pageable) { for (Sort.Order order : pageable.getSort()) { return order.getDirection().isAscending() ? user.name.asc() : user.name.desc(); } return null;} 코드는 이렇게 구성되어있고 나오는 쿼리는 이렇습니다. select user0_.namefrom users user0_where user0_.uuid in ('0685167f0ebd4d128c8607044e893e60', '081b37bc3661429395d366f015f55f9c', '099dcb0174bd4de693226d8785499431')order by case when user0_.name between '가' and '힣' then 1 when user0_.name between 'a' and 'Z' then 2 else 3 end asc, user0_.name asclimit 10; 제가 원하는 결과를 뽑으려면 select user0_.namefrom users user0_where user0_.uuid in ('0685167f0ebd4d128c8607044e893e60', '081b37bc3661429395d366f015f55f9c', '099dcb0174bd4de693226d8785499431')order by case when user0_.name between '가' and '힣' then 1 when user0_.name between 'a' and 'Z' then 2 else 3 end , user0_.name asclimit 10; 위의 쿼리 처럼 되어야 나오는데요... orderBy 구절에서 OrderSpecifier 타입만 넣을 수 있기 때문에 direction을 필수 적으로 넣어야 합니다.. 어떻게 해야할까요.........
- 미해결실전! Querydsl
@Transacitonal 사용이유에 대한 질문입니다!
@Transactional을 사용하면 롤백된다고 알고있는데 이 부분에서 왜 사용하는것인가요?트랜잭셔널을 넣으면 100개의 멤버가 다 롤백되지 않나요? 아니면 @Test에서 사용하는 방식과 일반 mvc방식에서 사용하는 방식의 차이점이 있는건가요? 예를들어 mvc방식에서는 에러가일어날경우 롤백인데 @Test인경우에는 에러가없어도 자동롤백이라던지요..
- 미해결실전! Querydsl
안녕하세요. pageable를 사용해 member 클래스 select를 하는데 질문이 있습니다.
member 클래스를 pageable을 사용해서 select 하려고 하는데 안되더라구여. 간단한 코드라 이상한 부분도 없고 이부분과 관련된 질문들 다 찾아봐서 (패키지위치, 패키지명) 등등 다 체크해보고 중요한건 같은 위치에 있는 member 이외의 다른 엔티티 클래스들로 하면 되더라구여. Q클래스 생성시 다른 클래스들은 자동으로 자기 클래스명과 동일하게 생성이 되던데 member 클래스만 public static final QMember member = new QMember("member1"); member1로 생성이되서 이부분도 수동으로 맞춰줘서 해봐도 동일한 에러가 계속뜨고, pageable의(sort, direction)만 사용을 안하면 에러가 안뜨는거보니 member 클래스명이랑 pageable쪽에 원인이 있는거 같은데 원인이 무엇일까요?
- 미해결실전! Querydsl
fetchOne()의 예외
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 항상 좋은 강의 감사합니다. @Repository를 통해 JPA의 예외를 스프링이 추상화한 예외로 변환한다고 알고있습니다. 스프링 데이터 jpa의 경우 구현체에 @Repository가 있어서 단건조회에서 결과가 2개 이상이 나오는 경우 org.springframework.dao.IncorrectResultSizeDataAccessException 처럼 스프링 예외로 추상화되어 나오고 @Repository 클래스, 순수 jpa를 이용했을때도 같았습니다. querydsl도 JPQL 빌더이기에 @Repository에 의해 스프링 예외로 추상화 되지 않을까 생각했지만 com.querydsl.core.NonUniqueResultException 처럼 querydsl의 예외가 나왔습니다. 스프링 데이터 jpa에서 하부 구현기술을 바꾸더라도 기존 비즈니스 로직에 영향을 최대한 주지 않게 Service, Controller 계층에 스프링 예외로 올라가도록 한거라고 배웠는데 Querydsl 예외로 올라가면 결국 Querydsl 을 사용하지 않게 되면 기존 예외처리에 대한 부분에서 변경을 해야할 것 같은데 실무에선 그냥 Querydsl예외로 처리하나요? 생각해보면 현재 Qeurydsl 에서 다른 기술로 바꾸거나 빼거나 할 경우는 없어보이긴합니다 ㅎㅎ