월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! Querydsl
tuple자료구조가 어떻게 되어 있는 건가요 ?
@Test public void tupleProjection() throws Exception { List<Tuple> result = queryFactory .select(member.username, member.age) .from(member) .fetch(); System.out.println("result = " + result); for (Tuple tuple : result) { String username = tuple.get(member.username); Integer age = tuple.get(member.age); System.out.println("username = " + username); System.out.println("age = " + age); } } result = [[member1, 10], [member2, 20], [member3, 30], [member4, 40]]username = member1age = 10username = member2age = 20username = member3age = 30username = member4age = 40 출력값이 위와 같은데 .get()메소드로 꺼내는 걸로 보면 Map과 같은 자료구조인건가 싶기도 하면서, 통째로 출력하면 List<List<>>와 같은 자료구조의 모습이더라구요tuple은 어떤 자료구조인가요?
- 미해결실전! Querydsl
join메서드 궁금증입니다 ..
List<Member> result = queryFactory .selectFrom(member) .join(member.team, team) .where(team.name.eq("teamA")) .fetch();위의 QueryDSL문을 sql문으로 번역하면 select * from member as m join team as t on m.team_id = t.team_id where t.name='teamA' 가 맞나요? 관계형DB를 객체 다루듯이 사용하기 위해 Member안에는 Team 클래스가 있고, Team 클래스 안에는 Member 클래스가 있지만 실제로는 .join(member.team, team)와 같은 코드를 작성하면 내부적으론 DB의 테이블에 가서 외래키와 기본키를 비교해서 값을 가져오는 건가요 ?
- 해결됨실전! Querydsl
from절 서브쿼리를 아직 querydsl에서 지원하지않나요?
하이버네이트 6.1인가 6.2였나부터 from절 서브쿼리를 지원한다고 어디서 줏어들었었는데,아직 queryDSL에선 지원하지않나요? queryDSL 깃헙 최신릴리즈버전도 21년도라서 없을거같기도 한데 예전에 무슨 하이버네이트 서브파티쓰면 queryDSL로 할수있다고 어디서 들어서 그거로 어떻게 안되나 싶어서 궁금해서 질문드립니다
- 미해결실전! Querydsl
searchPageSimple 테스트코드 질문
강의 내용에서 memberRepository.searchPageSimple 의 코드에 orderBy 가 없는데 result가 member1, member2, member3인 것을 어떻게 보장하는 건가요 ?
- 미해결실전! Querydsl
SearchTest 질문입니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Test public void searchTest() { Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 20, teamA); Member member3 = new Member("member3", 30, teamB); Member member4 = new Member("member4", 40, teamB); em.persist(member1); em.persist(member2); em.persist(member3); em.persist(member4); MemberSearchCondition condition = new MemberSearchCondition(); condition.setAgeGoe(35); condition.setAgeLoe(40); condition.setTeamName("teamB"); List<MemberTeamDto> result = memberJpaRepository.searchByBuilder(condition); Assertions.assertThat(result).extracting("username").containsExactly("member4"); }테스트를 돌렸는데 member4만 가지고있다고 밑의 에러가 발생했습니다 . jparepository의 메서드 문제일까요?? 아래는 memberjparepository입니다public List<MemberTeamDto> searchByBuilder(MemberSearchCondition condition) { BooleanBuilder builder = new BooleanBuilder(); if(hasText(condition.getUsername())){ builder.and(member.username.eq(condition.getUsername())); } if(hasText(condition.getTeamName())){ builder.and(team.name.eq(condition.getTeamName())); } if(condition.getAgeGoe() != null) { builder.and(member.age.goe(condition.getAgeGoe())); } if(condition.getAgeGoe() != null) { builder.and(member.age.goe(condition.getAgeLoe())); } return queryFactory .select(new QMemberTeamDto( member.id.as("memberId"), member.username, member.age, team.id.as("teamId"), team.name.as("teamName") )) .from(member) .leftJoin(member.team, team) .fetch(); }
- 미해결실전! Querydsl
delete 후에도 em.flush, clear 가 필요한가요 ?
@Test public void bulkDelete() { long count = queryFactory .delete(member) .where(member.age.gt(18)) .execute(); System.out.println("----------- bulk 연산 직후 / em.flush, clear 전 1 -----------"); List<Member> result = queryFactory .selectFrom(member) .fetch(); for (Member member : result) { System.out.println("member = " + member); } System.out.println("----------- bulk 연산 직후 / em.flush, clear 전 2 -----------"); // em.flush(); // em.clear(); System.out.println("----------- em.flush, clear 후 1 -----------"); List<Member> result2 = queryFactory .selectFrom(member) .fetch(); for (Member member2 : result2) { System.out.println("member2 = " + member2); } System.out.println("----------- em.flush, clear 후 2 -----------"); }update와 달리 delete에서 출력해봤을 때,em.flush 하기 전에도 10살이 회원 한명만 뜨는데delete bulk 연산 후에는 update와 달리 flush, clear가 없어도 상관없나요 ?
- 미해결실전! Querydsl
첫번째 querydsl테스트 코드 에서 nullpointexception이 터졌습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.q타입을 생성하고 import를 해주었습니다. package study.querydsl; import com.querydsl.jpa.impl.JPAQueryFactory; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import study.querydsl.entity.Member; import study.querydsl.entity.Team; import javax.persistence.EntityManager; import static study.querydsl.entity.QMember.*; @SpringBootTest @Transactional public class QuerydslBasicTest { @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach public void before() { Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 20, teamA); Member member3 = new Member("member3", 30, teamA); Member member4 = new Member("member4", 40, teamA); em.persist(member1); em.persist(member2); em.persist(member3); em.persist(member4); } @Test public void startJPQL() { String qlString = "select m from Member m" + " where m.username = :username"; Member findMember = em.createQuery(qlString, Member.class) .setParameter("username", "member1") .getSingleResult(); Assertions.assertThat(findMember.getUsername()).isEqualTo("member1"); } @Test public void startQuerydsl() { Member findMember = queryFactory .select(member) .from(member) .where(member.username.eq("member1")) .fetchOne(); Assertions.assertThat(findMember.getUsername()).isEqualTo("member1"); } }
- 미해결실전! Querydsl
BooleanExpression을 이용해서 쿼리 검색
안녕하세요! BooleanExpression으로 메소드를 만들어 필터링 기능을 구현중입니다.Repository에서 이런식으로 BooleanExpression 메소드를 and으로 엮었습니다.return queryFactory.selectFrom(member) .innerJoin(member.activities, activities) .where(checkActivityContainsPart(part), checkMemberBelongToTeam(team)) private BooleanExpression checkActivityContainsPart(String part) { if (part == null) return null; return QMemberSoptActivity.memberActivity.part.contains(part); } private BooleanExpression checkMemberBelongToTeam(String team) { if (team == null) return null; switch (team) { case "임원진" -> { return QMemberSoptActivity.memberActivity.part.contains("회장") .or(QMemberSoptActivity.memberActivity.part.contains("부회장")); // 회장, 부회장, ~파트장, 운영 팀장, 미디어 팀장 } case "운영팀" -> { return QMemberSoptActivity.memberActivity.part.contains("총무"); // 회장, 부회장, ~파트장, 운영 팀장, 미디어 팀장 } default -> { return null; } } } memberActivity에는 파트원인지, 회장인지에 대한 활동 정보가 들어있습니다.어떤 기수에서는 회장을, 어떤 기수에서는 파트원을 했을 경우가 있습니다.이 모든 경우에 맞는 회원을 찾는 것이목표인데, 조건이 and( ) and( )으로 엮어지면서, 메소드checkActivityContainsPart()와 checkMeberBelongToTeam() 조건을 모두 포함하는 경우를 찾지 못합니다. (하나하나 조건을 줄때는 구해지지만, 둘다 모두 필터링 걸었을때는 찾아지지 않아요..)이를 가독성 있게 분리하면서 해결할 수 잇는 방법이 있을까요?원하는 쿼리는 (activities.part like ? and activities.part like ? or activities.part like ? or activities.part like ?) 이렇게 다 엮이는 것입니다!
- 미해결실전! Querydsl
프로퍼티 접근, 필드 직접 접근, 생성자 사용 중에 어떤 방법이 제일 좋나요 ?
프로퍼티 접근, 필드 직접 접근, 생성자 사용 중에 어떤 방법이 제일 좋나요 ?? @Autowired보다 생성자 주입이 더 좋은 거처럼 더 좋은 방법이 따로 있는건지 궁금합니다 !
- 미해결실전! Querydsl
distinct 테스트코드 관련 질문 드립니다.
@Test public void distinct() { em.persist(new Member("member1")); em.persist(new Member("member2")); em.persist(new Member("member2")); em.persist(new Member("member5")); List<String> usernames = queryFactory .select(member.username).distinct() .from(member) .fetch(); assertThat(usernames) .containsExactly("member1", "member2", "member3", "member4", "member5"); } 테스트코드 직접 짜본 경험이 별로 없어서 그런데이렇게 짜면 되는걸까요 ...?
- 해결됨실전! Querydsl
querydsl을 사용한 프로젝트를 cafe24에 배포하는데 문제가 생겼습니다ㅠㅠㅠㅠ
cafe24에 프로젝트를 배포하기 위해서는 ROOT.war파일을 생성해야했습니다.프로젝트를 만들 때 jar를 선택하고 생성해버려서 war로 변경해야했고, 이는 구글링을 통해 해결 하였습니다. 하지만 ROOT.war파일을 압축 해제하고 보니 Q클래스들이 하나도 없었습니다. 아마 build > generated > querydsl 경로에 Q클래스들이 있어서 그런게 아닐까 생각하고 있습니다.어떻게 해결하면 좋을까요?ㅠㅠ build.gradle코드는 아래와 같습니다.plugins { id 'org.springframework.boot' version '2.2.2.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java' id 'war' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '8' configurations { compileOnly { extendsFrom annotationProcessor } developmentOnly runtimeClasspath { extendsFrom developmentOnly } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' implementation 'org.springframework.boot:spring-boot-starter-web' //war파일로 배포하기위한 설정 providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' //스프링부트에서 validation을 사용하기 위한 코드 implementation 'org.springframework.boot:spring-boot-starter-validation' // json 파싱 implementation 'com.googlecode.json-simple:json-simple:1.1.1' developmentOnly("org.springframework.boot:spring-boot-devtools") compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' runtimeOnly 'org.mariadb.jdbc:mariadb-java-client:2.7.0' runtimeOnly("mysql:mysql-connector-java") annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //model mapper implementation 'org.modelmapper:modelmapper:2.4.2' // lombok을 테스트 환경에서도 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' // 이메일 전송 implementation 'org.springframework.boot:spring-boot-starter-mail' //파라미터가 적용된 쿼리문 // implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8' //querydsl 추가 implementation 'com.querydsl:querydsl-jpa' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } //테스트코드 작성시 entityManagerFActory에러 때문에추가 implementation group: 'org.javassist', name: 'javassist', version: '3.15.0-GA' } 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
Controller, Serivce에서의 Querydsl, JPA 의존(?)
Querydsl 강의 <섹션 7. 스프링 데이터 JPA가 제공하는 Querydsl 기능> 강의를 들으면서QuerydslPredicateExecutor나 Querydsl Web 지원을 사용하게 되면 Controller나 Service에서Querydsl에 의존하게 되니까 사용하는걸 권장하지 않는다고 말씀해주셨습니다. 스프링 데이터 JPA에서 Pageable을 사용하면 Controller나 Service에서org.springframework.data.domain.Pageable 에 의존하게 됩니다.Spring Web과 Spring Data JPA 를 같이 사용하는 경우가 많기 때문에Spring Web이 Spring Data JPA에 의존하게 되는건 크게 문제가 되지 않는건가요?
- 해결됨실전! Querydsl
Querydsl 설정과 검증 중 오타가 있는 거 같습니다
testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: ‘org.junit.vintage’, module: ‘junit-vintage-engine' } 에서 ‘org.junit.vintage’, module: ‘junit-vintage-engine'작은 따옴표가 이상한 거 같습니다복사 붙여넣기해서 IDE에 넣으면 작은 따옴표가 아니라 백틱 코드가 나오긴 하네요
- 해결됨실전! Querydsl
jakarta 환경에서 javax 클래스패스로 entityManager를 찾고있습니다.
실행환경gradle 7.6.1java 17, jdk19spring boot 3.0.2제일 처음 환경을 설정한 후 테스트하는 코드에서 아래와 같은 로그가 발생합니다.java: cannot access javax.persistence.EntityManager class file for javax.persistence.EntityManager not found import static org.assertj.core.api.Assertions.*; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import study.querydsl.entity.Hello; import study.querydsl.entity.QHello; @SpringBootTest @Transactional class QuerydslApplicationTests { @Autowired EntityManager em; @Test void contextLoads() { Hello hello = new Hello(); em.persist(hello); //현재 컴파일 에러가 나고 있는 부분 JPAQueryFactory query = new JPAQueryFactory(em); //em에서 javax.persistence.EntityManager 클래스를 찾을 수 없다는 에러가 나고 있음. QHello qHello = new QHello("h"); Hello result = query .selectFrom(qHello) .fetchOne(); assertThat(result).isEqualTo(hello); } }import문까지 모두 jakarta로 해주고 있습니다. 정상적으로 Q타입클래스가 되어있는데 JPAQueryFactory 생성자 부분의 에러가 전혀 사라지지 않습니다.버전문제인가 싶어서 여러번 버전을 확인했는데도, 제가 확인한 바로는 버전 호환에서는 문제 될 것이 없어보입니다.dataJPA가 3.0.X버전이상에서는 hibernate를 6+버전으로 맞춰줘야한다고 해서 확인해본 결과 hibernate는 다음과 같습니다.org.hibernate.orm:hibernate-core:6.1.7.Final추가적으로 build.gradle 코드를 올려놓겠습니다.plugins { id 'java' id 'org.springframework.boot' version '3.0.2' id 'io.spring.dependency-management' version '1.1.0' id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' // == 스프링 부트 3.0 이상일 때, querydsl 의존성 == implementation "com.querydsl:querydsl-core:5.0.0" implementation "com.querydsl:querydsl-collections" implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta") annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api:3.1.0" testImplementation ('org.springframework.boot:spring-boot-starter-test') testImplementation 'jakarta.persistence:jakarta.persistence-api' testImplementation 'com.querydsl:querydsl-jpa:5.0.0' } 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
동적 정렬(orderBy)처리중 페이징 문제가 발생했는데 해결해주실 수 있을까요?ㅠㅠ
개인 프로젝트를 진행하며 querydsl을 사용하여 동적 쿼리문을 작성했습니다. 무한스크롤 페이징 처리를 하였고, 코드의 일부분만 보여드리면 아래와 같습니다.public ArticlePagingResponse<Article> searchDynamicQueryAndPaging(Long lastArticleId, ArticleSearchCond cond, String orderBy, int size) { JPAQuery<Article> query = new JPAQuery<>(em); query.from(article) .join(article.member,member)//article.member는 Article테이블에 있는 member_id, member는 Member테이블에 있는 id라고 생각 .join(article.restaurant, restaurant)//article.restaurant는 Article테이블에 있는 restaurant_id, restaurant는 Restaurant테이블에 있는 id .fetchJoin() .where( // no-offset 페이징 처리 ltStoreId(lastArticleId), // 검색조건들 생략... ); //정렬 동적 처리 switch(orderBy){ case OrderConst.CREATED_DATE_DESC://최신 순으로 정렬 query.orderBy(article.createdDate.desc()); break; case OrderConst.CREATED_DATE_ASC://오래된 순으로 정렬 query.orderBy(article.createdDate.asc()); break; case OrderConst.VIEWS_DESC://조회수 순으로 정렬 query.orderBy(article.views.desc(),article.createdDate.desc()); break; case OrderConst.LIKE_COUNT_DESC://좋아요 갯수 순으로 정렬 query.leftJoin(likeArticle) .on(article.id.eq(likeArticle.article.id)) .groupBy(article.id) .orderBy(likeArticle.count().desc(),article.createdDate.desc()); break; case OrderConst.COMMENT_COUNT_DESC://댓글 갯수 순으로 정렬 query.leftJoin(comment) .on(article.id.eq(comment.article.id)) .groupBy(article.id) .orderBy(comment.count().desc(),article.createdDate.desc()); break; default: throw new IllegalStateException("OrderConst에 정의되어있는 orderBy값 외의 다른 값이 들어왔습니다."); } List<Article> results = query .limit(size + 1) .fetch();//size를 DB에서 받는 것보다 프론트에서 받는게 더 유연할 것같음.fetch(); boolean hasNext = false; if (results.size() > size) {//결과가 6개이면 size(5)보다 크므로 다음 페이지가 있다는 의미 hasNext = true; results.remove(size - 1);//다음 페이지 확인을 위하 게시글을 하나더 가져왔으므로 확인 후 삭제 } return new ArticlePagingResponse<>(results,hasNext); }코드를 보면 no-offset방식으로 구현을 하였습니다. whrer문의 lastArticleId 값을 받고 그것보다 작은 값중에 5개씩 받도록 처리하였습니다.예) 10, 9, 8, 7, 6 의 게시글을 받고 그다음 스크롤 이벤트가 발생하면 6보다 작은 값 중에서 5개인 5, 4, 3, 2, 1 을 가져 오는 것입니다.문제는 최신순으로 정렬하여 값을 가져오면 최신 게시글의 id값이 가장 크므로 잘 작동하는데 다른 정렬 조건(오래된 순, 조회수순, 좋아요 갯수순, 댓글 갯수순) 으로 가져올 때는 id값의 순서를 예상하지 못하니때문에 정렬이 되지않는 문제가 발생하였습니다.오래된 순은 id값을 lt 대신에 gt쓰고 어떻게 구현할 수 있을 것같은데 다른 정렬 조건(조회수순, 좋아요순, 댓글순)은 어떻게 구현할 좋은 방법이 생각 나질 않네요 방법을 아시는 분 계시면 알려주시면 감사하겠습니다.
- 해결됨실전! Querydsl
오라클 함수
안녕하세요 영한님 강의 너무 잘 들었습니다.저희 팀에서 스프링 데이터 jpa, querydsl을 사용해서 프로젝트를 할 예정입니다.db는 오라클을 사용할 건데요jpa나 querydsl에서 오라클 함수나 프로시저등을 사용 할 수 있는 방법이 있을까요?jpa, querydsl을 제가 해야 될 것 같아서 조금 긴장되네요답변부탁드립니다.찾아보니 가능한것 같습니다~
- 미해결실전! Querydsl
정렬을 했을때 몇번째 raw인지 조회
안녕하세요 만약에 시험 점수를 관리하는 테이블이 있다면 그 시험점수를 기반으로 순위를 매길려고 할때정렬된 테이블 중에서 제가 가져온 raw가 테이블에서 몇번째로 값이 높은 raw인지 알 수 있는 키워드는 없나요? 설령 없다면 해당 비즈니스 로직은 어떻게 처리를 해줘야 될까요?
- 미해결실전! Querydsl
안녕하세요 프로젝트 실행 문의 드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]영한쌤 강의를 쭉 따라서 들어왔는데요. 그동안의프로젝트와는 다르게 왜 이번 querydsl 편은 프로젝트 생성후 실행시 그냥 폴더 자체를 선택하는게 아니라 build.gradle 파일을 선택후 오픈해야 하나요?? 또 그렇게 build.gradle 파일 한개만 선택해서 오픈했는데 일반 프로젝트 폴더를 여는것처럼 main부터 test및 다른 파일 모두가 있는건가용??? 그리고 왜 querydsl폴더 자체를 선택후 열면 파일구조는 모두 똑같은데 활성화가 안되는지 궁금합니다
- 미해결실전! Querydsl
동시성 문제 관련
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강의중에 스프링과 EntityManager를 함께 쓰면 트랜잭션 단위로 라우팅 되기 때문에 동시성 문제가 발생하지 않는다고 설명해주셨습니다. 그렇다면 , dirty checking을 이용한 조회수 증가와 같은 update 쿼리를 날릴 때에도 동시성 문제가 발생하지 않는지 여쭤보고 싶습니다.
- 미해결실전! Querydsl
벌크연산
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]질문 1.벌크 연산시em.clear 을 해주는데 이때 원치 않는영속성 컨텍스트의 값을 clear 하는 경우는 없나요 ? 그리고 벌크 연산시 flush,clear을 해주는 이유가영속성 컨텍스트와 디비 정보를 일치하게 만들어 줄려고 하는건데만약에 벌크연산 트랜잭션 안에 따로 벌크연산말고 다른 코드가 없으면 em.flush, em.clear 코드기 필요 없는데 습관처럼 안전하게 넣는다고 생각하면 되는건가요? ==============================질문 2.querydsl 은 업데이트할떄 때로findbyid 를 할 필요가 없는건가요 >?