월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨실전! Querydsl
컬렉션 엔티티 Lazy 초기화 질문드립니다.
안녕하세요. 서비스에서 select 해온 Entity에 toMany 연관관계 필드를 초기화 하는 부분에 대해 궁금해 질문드립니다.class AEntity{ @Id private Long id; @OneToMany(mappedBy=aEntity) private List<BEntity> bEntitise = new ArrayList<>(): }class BEntity{ @Id private Long id; @ManyToOne(fetch = FetchType.Lazy) @JoinColumn(name="a_id") private AEntity aEntity; }이렇게 서로 양방향인 엔티티가 있다고 했을 때class AService{ public AEntity findEntity(Long id){ AEntity findEntity = aRepository.findById(id).get(); //findEntity의 BEntityList를 lazy 초기화 하기 위한 코드 findEntity.getBEntities().size(); return findEntity; } }서비스에서 엔티티를 찾아 컨트롤러로 리턴해주어 컨트롤러에서 dto로 변환 후, Body에 담아 보여주고 있습니다.그런데 findEntity의 BEntities 필드를 서비스에서 초기화 시켜준 후 컨트롤러에서 DTO로 변환해야 LazyInitializationException이 발생하지 않아서 findEntity.getBEntities().size();이렇게 초기화를 해주는 코드를 작성하였는데해당 코드가 뜬금없이 들어가 있는 느낌이라 보통 컬렉션 Lazy 엔티티를 초기화할 때 저렇게 사용해도 되는지 궁금해서 질문드립니다.(fetch 조인은 사용하지 않는다는 가정입니다.)
- 미해결실전! Querydsl
멀티모듈 JPAQueryFactory 빈 여러개 생성
안녕하세요 멀티모듈을 적용한 프로젝트를 진행중인데 querydsl 관련 궁금한게 생겨서 질문 드립니다.멀티 모듈을 적용해 프로젝트를 진행중입니다.모듈은 크게 3가지가 있는데api - controller 및 시큐리티 설정restaurant - 음식점에 관련된 코드(service, repository, entity)user - 유저 정보에 대한 코드 (service, repository, entity)api는 restaurant 와 user 모듈을 implementation 받고 있습니다.이렇게 구성이 되어 있는데querydsl을 restaurant 모듈과 user 모듈 둘 다 적용하려다 보니각각 build.gradle에 querydsl 설정을 해주어야 하고JPAQueryFactory 빈 등록 또한 각각 해주어야 합니다.api 에 공통적으로 등록하려다 보니 api 모듈은 querydsl을 사용하지 않습니다.설정을 위해 공통적인 빈 설정을 api 모듈에서 해줘도 될까요?아니면 각각 모듈마다 빈등록을 하는 것이 좋을까요?(이렇게 똑같은 빈 등록을 여러 모듈에서 해주어도 되는 걸까요?)모듈은 여러개지만 하나의 DB에 연결하여 사용중입니다.
- 해결됨실전! Querydsl
Repository 메소드의 파라미터 질문드립니다.
안녕하세요 강의 잘 듣고 있습니다.강의를 듣는 도중에 궁금한 점이 있어서 이렇게 질문 드립니다.컨트롤러의 return타입은 entity를 캡슐화 하기 위해 DTO를 사용하고, 각 Layer 별로 데이터를 주고 받을 때 DTO 또는 Entity를 상황에 맞게 사용하고있습니다. 또한 Repository에서는(Service -> Repository) Entity를 넘겨주어서 사용하도록 하고 있습니다. 이유는 DTO는 Getter,Setter로 가변이지만 Entity는 불변객체이기에 영속 계층에서는 가변 객체를 파라미터로 넘겨준다면 위험하다고 생각해서입니다.그런데 강의에서는 DTO를 Repository 까지 전달하시는 것을 보고 DTO가 영속 계층까지 가는것에 문제가 없는가 궁금하여 질문드립니다.추가로 AEntity의 Repository에서 BEntity를 파라미터로 받아도 설계상?으로 괜찮은지도 궁금합니다.class MemberRepository{ //파라미터로 DTO 받기 List<Member> findMember(MemberDto memberDto){ ... } //파라미터로 다른 Entity 받기 Member doSomething(Team team){ ... } }
- 미해결실전! Querydsl
강사님 "프로젝션과 결과 반환 - DTO 조회" 질문 있습니다.
안녕하세요. 강사님. "프로젝션과 결과 반환 - DTO 조회" 강의에서 궁금한 게 생겼습니다.querydsl는 클래스 안에 있는 클래스를 처리할 수 있는 방법이 있나요?예를 들어서 아래 두 개의 클래스가 있으면 Member.class 형태로 값을 가져올 수 있는 방법이 있나요?감사합니다. class Member { private Team team; private String username;} class Team { private String teamname; private int count;}
- 해결됨실전! Querydsl
7강 마지막 Querydsl4RepositorySupport 질문 있습니다
[질문 내용]여기에 질문 내용을 남겨주세요. Querydsl4RepositorySupportabstract 으로 구현 하셨는데 이클래스를 public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom { 이렇게 memberRepository 하나로 쓸순 없나요 ? @Repository public class MemberTestRepository extends Querydsl4RepositorySupport { 별개로 움직여서 사용 해야하나요 ??
- 미해결실전! Querydsl
Querydsl Where문에서 .and .or 질문입니다
.where(post.category.eq(categoryReceived) .and(post.title.contains(searchReceived)) .or(post.content.contains(searchReceived)) )지금 구현한 코드 일부 입니다.제가 원하는것은where 문 안에category.eq(~).and(title.contains(~)) 이거나category.eq.and(content.contains(~)) 일때db에서 긁어 오는것을 구현 하고 싶습니다. 그런데, 막상 해보니 or 안에 들어있는 조건만 충족해도 긁어오더라구요.질문 1. 이러한 경우에 코드를 어떻게 작성하면 효율적으로 구현이 될까요?..where문 안에 ,(콤마)가 and 조건이라고 하는데 콤마 말고 or 조건을 나타내는 기호가 있을까요?
- 미해결실전! Querydsl
where 절에서 alias를 사용하려면 어떻게 해야할까요?
List<UserDto> fetch = queryFactory .select(Projections.bean(UserDto.class, member.username.as("name), ExpressionUtils.as( JPAExpressions .select(item.itemCnt.max()) .from(item), "itemCount")) ).from(member) .fetch();위의 샘플과 같이 member 테이블 안에서 item의 서브쿼리를 사용합니다.위와같이 작성해서 실행을 하는데는 아무런 문제가 없습니다.그런데 문제가 되는 부분이where절에서 서브쿼리로 작성된 itemCount의 범위를 검색을 하려고 하는데 어떤식으로 처리를 해야할지 난감합니다. 이리저리 검색을 해서 아래와 같은 방법으로 비슷하게 구현을 한 방법이 있기는 한데Path<Long> itemCountAlias = Expressions.numberPath(Long.class, "itemCount");적용을 해 봐도 적용이 안됩니다.ㅠㅠ오류가 itemCnt 이름의 칼럼이 없습니다.라는 오류만 뿌려줍니다.private BooleanExpression whereByItemCond(SearchOption searchOption, Path<Long> aliasQuantity) { String cnt = searchOption.getSearchCount(); if(searchOption.getSearchType().equals("itemCount")){ return aliasQuantity != null ? aliasQuantity.eq(String.valueOf(cnt)) : null; } } 서브쿼리에 추가한 Alias를 조건 검색문에서 검색할려면 어떤식으로 처리를 해야할까요? 혹시 제가 접근 방법을 잘못 알고 있다면 어떤식으로 처리를 해야할까요?결론적으로 구현하고 싶은 것은A, B 테이블이 있는데 A테이블에서 서브쿼리로 B테이블의 특정 값을 추가해서 목록으로 뿌려주고 있는데검색 조건을 A테이블에서가 아닌 B테이블에 있는 값(A+B테이블의 조합으로 만들어진 목록 데이터값)을 필터링해서 검색을 하려고 합니다. 제목 | 작성자 | 아이탬 수---------------------첫째 홍길동 4둘째 김길동 5셋째 박길동 2이런식으로 목록을 보여주는 화면이 있는데 제목과 작성자는 member테이블에서, 아이템수는 item 테이블에서 가져왔습니다.쿼리는 위에서 적은것과 같이 기본 member테이블에서 item테이블을 서브쿼리를 사용해서 값을 추가했습니다. ExPressionUtils.as(JPAExpression.select~~)여기서 기본검색(?)조건인 제목, 작성자 검색은 문제가 없는데, 서브쿼리로 추가했던 아이템 수로 검색을 하려고 합니다.B테이블은 A테이블을 ManyToOne으로 설정이 되어 있습니다.
- 미해결실전! Querydsl
엔티티 클래스 생성 시 생성자 및 Setter 생성과 관련해 질문 드립니다.
해당 강의를 이제 막 시작하고 있는 학생입니다. queryDSL 환경 세팅을 하다가 엔티티 클래스에 궁금한 점이 생겨서요. 보통 질의에 대한 결과 데이터에 대해 수정이 불가능하도록 불변 객체로 만든다고 하잖아요.그 때문에 JPA에서 사용하는 엔티티 객체 또한 생성자를 public으로 만들지 않고 Setter의 사용도 피한다고 알고 있습니다.그런데 위 방법이 JPA로 질의를 해올 때는 문제가 되지 않지만 ( 즉, select할 경우 ) 직접 제가 객체를 만들어서 ( new 생성자 사용 ) insert를 하거나, select한 객체에 필드 값을 수정해서 ( setter 사용 ) update를 하는 경우에는 public 생성자도 setter도 모두 필요한 것 아닌가요?.. 혹은 제가 잘못된 정보를 알고 있는 것일까요??select 시 대안으로 해당 결과를 final로 하여 받으면 불변 객체가 되어 조회 이후 데이터 수정을 막을 수 있다고 생각했지만 public 생성자 사용 여부와 setter 사용 여부에 대한 적절한 상황 파악이 어려워 질문 드립니다!
- 해결됨실전! Querydsl
안녕하세요. 실전 모든 강의 수강했습니다.
[질문 내용]안녕하십니까.김영한 강사님의 모든 실전 강의를 다 들었습니다. JPA 관련 고퀄리티의 강의 정말 감사합니다.저희 회사에서 이번 프로젝트에 JPA를 적극 도입하고자 하는데 기존 수업을 들었던 환경과 조금 달라 이렇게 문의를 하고자 합니다.저희 회사에서 여러 DB (최소 4개 이상)를 한 스프링 백엔드에서 다뤄야하는 상황이 되었습니다. 이 상황에 JPA로 DB를 각각 연결하여 사용하는 것이 가능할까요? 또한 성능적으로도 문제가 없을 지 궁금합니다.
- 미해결실전! Querydsl
Deprecated
querydsl 5.0 버전부터 fetchResult() , fetchCount()가 Deprecated 되서 공식문서에서는 이 두 메서드 대신에 fetch.size를 권장 한다고 합니다 https://devwithpug.github.io/java/querydsl-with-datajpa/참고 하실분 참고하세용
- 해결됨실전! Querydsl
무한 반복 call next value for hibernate_sequence
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 선생님. 스프링때부터 JPA까지 선생님 강의가 매우 퀄리티가 높아 잘 보고 있습니다.강의 중간중간에 따라쳐도 안되는 부분들은 전부 구글링으로 해결을 했었는데 이번건은 좀 난해하네요.실전! Querydsl의 실무 활용 - 순수 JPA와 Querydsl 섹션 중 마지막 강의인 조회 API 컨트롤러 개발 강의를 듣다가 따라서 application을 run했는데, 무한히이런 코드들이 반복되어 나옵니다.구글링으로도 검색이 안되는 것 같아서 질문 남깁니다^^;혹시 몰라 제 코드도 같이 올립니다.https://drive.google.com/file/d/1dvt8k4-BPhsH2MDWXFyAChGU17-AEpLv/view?usp=share_link늘 건강하세요.
- 해결됨실전! Querydsl
count 쿼리 최적화 질문 드립니다.
안녕하세요! 영한님^^개발자들을 위해여 양질의 강의를 제공해주셔서 정말로 감사의 말씀을 드립니다.🙏 질문드리겠습니다. 먼저 제가 이해한 내용을 말씀드리겠습니다.PageableExecutionUtils를 사용하면 count 쿼리 최적화하 가능 하다고 말씀하셨습니다.그 이유는 람다를 사용하여 게으른 호출로 인하여 실제 사용되기 전까지는 함수가 실행되지 않는다고 이해했습니다. 다음 2가지 경우에 count 쿼리가 실행되지 않다고 말씀하셨습니다.페이지 시작이면서 컨텐츠 사이즈가 페이지 사이즈 보다 작을때페이지 시작(0)이면서 컨텐츠 사이즈(3)가 페이지 사이즈(10)보다 작다면 컨텐츠 사이즈(3)가 카운트 갯수 마지막 페이지 일때(offset + 컨텐츠 사이즈 = 카운트)예를 들어 전체 데이터는 103개이고, 페이지 사이즈는 10이라고 한다면마지막 페이지 일때는 offset(100), 컨텐츠 사이즈(3)이라서 카운트는 103으로 이해 하고 있는데 맞는 내용 인가요? 감사합니다.^^
- 미해결실전! Querydsl
order by case 문
안녕하세요.아래와 같은 상황에서 case when 을 order by에 사용할 수 있을까요?해보려고 했는데 빨간줄이 뜨네요 ㅠ 출처 : https://hashcode.co.kr/questions/3480/%EB%8C%80%EB%8C%93%EA%B8%80-db-%EC%8A%A4%ED%82%A4%EB%A7%88-%EC%84%A4%EA%B3%84
- 미해결실전! Querydsl
Tuple안에 QResponseDto로 만든 값이 get이 안됩니다
QueryDsl을 쓰다보면 반환타입이 List<Tuple>이 나오는 경우가 있습니다.이 경우에, 일반적인 값들은 .get(0).get(Type)을 쓰면 읽어 와지는데, @QueryProjection을 붙인 dto는 빨간줄이 뜨네요.아래와 같이 4가지 시도를 했는데 전부 빨간줄이 떠서 어떻게 해결방법이 있을까 하고 질문글 올려봅니다
- 미해결실전! Querydsl
기존 project에 Querydsl 적용 문제입니다
기존에 작성하던 코드에 querydsl을 붙였는데 문제가 뜨네요..빈 프로젝트 test코드에선 잘 작동하였는데UnsatisfiedDependencyException이 계속 뜨네요.. jparepository에 extend 하는 순간에 에러가 뜹니다.커스텀 파일 (PostRepositoryCustom,PostRepositoryImpl)두 클래스만 연결하고 run을 돌렸을땐 에러가 안뜹니다.그런데, jpa repository을 상속받은 PostRepository에 extend로 PostRepositoryCustom을 연결해주는 순간 저렇게 에러가 뜨네요...구글링해봐도 이유를 모르겠습니다 제발 도와주세요org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'likeController' defined in file [E:\dev\spring\week6\final\build\classes\java\main\com\example\soldapple\like\controller\LikeController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'likeService' defined in file [E:\dev\spring\week6\final\build\classes\java\main\com\example\soldapple\like\service\LikeService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'postRepository' defined in com.example.soldapple.post.repository.PostRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.List com.example.soldapple.quarydsl.PostRepositoryCustom.findAllMyTest(); Reason: Failed to create query for method public abstract java.util.List com.example.soldapple.quarydsl.PostRepositoryCustom.findAllMyTest()! No property 'findAllMyTest' found for type 'Post'; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List com.example.soldapple.quarydsl.PostRepositoryCustom.findAllMyTest()! No property 'findAllMyTest' found for type 'Post'
- 미해결실전! Querydsl
From 절 서브쿼리
안녕하세요. 네이티브 쿼리 사용하지 않고 from절에 서브쿼리를 작성해보고 싶어서 찾아봤는데,JPASQLQueryFactory 를 사용해서 from절 서브쿼리를 작성한 사례가 있더라구요..보고 좀 따라해봤는데 안되어서.. 혹시 JPASQLQueryFactory 를 사용해서 from절 서브쿼리 작성이 가능한가요??
- 미해결실전! Querydsl
BooleanExpression 모든 조건이 null 일 때
이 경우 where절이 빠짐에 따라 테이블의 모든 데이터가 나오는 건 이해했습니다. 테이블 데이터가 많을 경우 select를 많이 하느라 장애가 난다까진 알겠는데, 그렇다면 이걸 해결할 수 있는 게 페이징뿐인가요? 어떠한 사정이나 목적 때문에 페이징 적용이 되지 않은 쿼리의 경우, 이걸 방지하기 위한 방법이 있는지 궁금합니다.
- 미해결실전! Querydsl
JPQL vs Querydsl 강의 중에 startQuerydsl 테스트 코드 실행 시 에러질문이요
안녕하세요 JPQL vs Querydsl 부분 강의를 듣던 중에startQuerydsl() 테스트를 실행했는데 에러가 발생해서 질문 드립니다.현재 cannot find symbol class generated 에러가 발생합니다.검색 해본 결과Annotation Processor 문제 같아서Gradle Imported 에 있는 querydsl.main 폴더를Default 폴더로 이동 시켰습니다.현재 Default 폴더로 이동된 상황입니다.이후에 compileQuerydsl 을 빌드하고 다시 startQuerydsl()을 실행하면 동일한 에러가 발생합니다.그리고 gradle을 아예 새로고침하면querydsl.main 파일은 다시 Gradle Imported 로 돌아갑니다.. 현재 startQuerydsl 코드는 다음과 같습니다.@Test public void startQuerydsl() { JPAQueryFactory queryFactory = new JPAQueryFactory(em); QMember m = new QMember("m"); Member findMember = queryFactory .select(m) .from() .where(m.username.eq("member1")) .fetchOne(); assertThat(findMember.getUsername()).isEqualTo("member1"); } 또한 제가 Spring Boot 2.6 대 버전을 사용하고 있어서 build.gradle에 파일을 다음과같이 수정하고 아주 잘 돌아가는 상태였습니다.buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.6.13' id 'io.spring.dependency-management' version '1.0.15.RELEASE' //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' 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' implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}" implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' // 이거 Settins 에 Annotation Processor 에 Enable annotation processing 체크 해야한다. 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 } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } //querydsl 추가 끝 대체 왜 이런 에러가 발생하고 해결방법은 무엇일까요?감사합니다.
- 미해결실전! Querydsl
q class 생성 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Querydsl 사용 시 Q class 생성 이유가 궁금합니다.
- 해결됨실전! Querydsl
Quarydsl 로 no-offset 페이지네이션이 구현가능할까요?
[질문 내용]여기에 질문 내용을 남겨주세요.김영한님 로드맵중 실전로드맵 패키지 듣고있는데,restapi설계중에 무한스크롤을 구현해야하는 시점에강의 내용에 Quarydsl로 페이지네이션 강의가 나와서 여쭤봅니다no-offset 방식으로 페이지네이션이 구현 가능할까요 ? 가능하다면 어떤식으로 구현해야할까요..