inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

거의 다왔는데 제발 도와주세여 ㅠ

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] window로 libs파일 명까지 왔는데 java -jar hello-spring-0.0.1-SNAPSHOT.jar 하니깐 오류가 떠요 왜 실행이 안될까요 도와주세요ㅠ 자바 버전은 이렇습니다.

  • java
  • spring
  • mvc
  • spring-boot
김병곤 댓글 2 좋아요 1 조회수 502

[긴급] 로그인해도 네비게이션 바가 안 바뀌고 있습니다!! 로그인이 안 됩니다 도와주세요

미해결

스프링과 JPA 기반 웹 애플리케이션 개발

[로그인 로그아웃] 강의까지 수강했는데 도저히 막막해서 고민하다가 답답한 마음에 올립니다. 홈-가입-정보입력-로그인 눌러도 정보가 나타나지 않고 로그인/가입도 프로필/알림 이런 게 아예 안 뜹니다. 그리고 로그인탭을 누르면 우리가 만든 로그인 폼이 아니라 시큐리티 로그인으로 이동하고, 시큐리티 로그인을 해도 시큐리티 로그인화면이 localhost:8080/login으로 나올 뿐입니다. 로그인이 잘 돼서 로그인/가입이 프로필/알림 등으로 잘 보일 수 있도록 코드 어떻게 수정하면 좋을지 도와주세요. 가장 마지막까지 작성한 코드입니다. [로그인로그아웃 13:20]까지 수강했습니다. https://drive.google.com/file/d/1D3FexWWHLE0SZrdumtZVRmuqJFP5Atl6/view?usp=sharing

  • java
  • spring
  • spring-boot
  • jpa
  • thymeleaf
YOIEO_0120 댓글 1 좋아요 0 조회수 292

link태그를 사용하는데 페이지가 새로고침이 됩니다.

미해결

Next + React Query로 SNS 서비스 만들기

안녕하세요 선생님 강의보면서 플젝을 만들다가 여쭤보고 싶은게 생겼습니다. 📦(afterLogin) ┣ 📂(home) ┃ ┗ 📂_component ┃ ┃ ┣ 📜mbtiCarousel.module.css ┃ ┃ ┗ 📜MbtiCarousel.tsx ┣ 📂@modal ┃ ┣ 📂(.)promise ┃ ┃ ┗ 📂form ┃ ┃ ┃ ┗ 📜page.tsx ┃ ┣ 📂[userId] ┃ ┃ ┣ 📂_component ┃ ┃ ┃ ┗ 📜UsrCarousel.tsx ┃ ┃ ┗ 📜page.tsx ┃ ┗ 📜default.tsx ┣ 📂like ┃ ┗ 📜page.tsx ┣ 📂messages ┃ ┗ 📜page.tsx ┣ 📂profile ┃ ┗ 📜page.tsx ┣ 📂promise ┃ ┣ 📂form ┃ ┃ ┗ 📜page.tsx ┃ ┣ 📂_component ┃ ┃ ┣ 📜PromiseFormButton.tsx ┃ ┃ ┣ 📜promiseSection.module.css ┃ ┃ ┗ 📜PromiseSection.tsx ┃ ┗ 📜page.tsx ┣ 📂recommend ┃ ┣ 📂_component ┃ ┃ ┗ 📜RecommendSection.tsx ┃ ┣ 📜page.tsx ┃ ┗ 📜recommend.module.css ┣ 📂setting ┃ ┗ 📜page.tsx ┣ 📂[userId] ┃ ┗ 📜page.tsx ┣ 📂_component ┃ ┣ 📜Back.tsx ┃ ┣ 📜FriendRecommendSection.tsx ┃ ┣ 📜MainTitle.tsx ┃ ┣ 📜MbtiRecommendSection.tsx ┃ ┣ 📜Modal.tsx ┃ ┣ 📜userCard.module.css ┃ ┣ 📜UserCard.tsx ┃ ┗ 📜UserCardArticle.tsx ┣ 📜layout.module.css ┣ 📜layout.tsx ┗ 📜page.tsx 이런구조에서 (afterLogin) > UserCard 를 클릭하면 @modal > [userId] > page.tsx가 모달창으로 뜨게 됩니다. 새로고침해도 모달창이 뜨게 되어있습니다. 이게 로컬에서는 잘 작동하는데 테스트하려고 vercel에 배포해서 확인했더니 url은 바뀌는데 새로고침이 되고 화면은 바뀌지 않더라구요. 구글링해도 만족스런 답변이 없어서 이렇게 글을 남깁니다. return ( // <UserCardArticle user={user}> <Card className={style.userCard}> <Link href={`/${user.id}`} scroll={false} className='w-full h-full absolute top-0 left-0'> <img src={user.image[0]} className='rounded-xl h-full block w-full' alt="img" /> <div className={style.userInfo}> <h2 className='text-white font-extrabold text-xl'>{user.mbti.mbti}, 궁합 {user.mbti.score}%</h2> <h2 className='text-white font-extrabold text-xl'>{user.nickname}, {user.age}</h2> <p className='text-white font-semibold text-base'>{user.distance}km, {user.area}</p> </div> </Link> <div className='absolute bottom-3 px-3 w-full'> <Button variant={'default'} className='bg-white hover:bg-slate-50 w-full'> <UserPlus color='#000000' /> <span className='ml-2 text-black font-extrabold'>친구신청</span> </Button> </div> </Card> // </UserCardArticle> ) 기존 선생님처럼 UserCardArticle이란 컴포넌트를 만들어서 router.push도 해봤다가 link태그로 고쳐봤는데도 새로고침이 되어서 어떤부분을 봐야할지 조언 듣고 싶습니다. 감사합니다.

  • react
  • next.js
  • react-query
  • next-auth
  • msw
챠챠_ 댓글 1 좋아요 0 조회수 277

노션 링크로도 공유가능한가요?

미해결

김영한의 실전 자바 - 기본편

강의자료의 pdf내용을 제 옵시디언에 옮기고 있는데 복붙으로는 좀 번거로운 요소가 발생해서 마크다운으로 된 걸 복사하면 좋을 것 같아서요

  • java
  • 객체지향
한유저1 댓글 1 좋아요 0 조회수 238

질문있습니다

미해결

Java TPC 실전프로젝트 (Java API 활용)

JSONArray를 마지막에 JSONObject로 한번 더 감싸는 이유가 뭔가요?

  • java
  • 객체지향
Levi 댓글 1 좋아요 0 조회수 288

@Repository에서 체크 예외를 사용하면

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

이전에 체크 예외, 언체크 예외 강의때 예외가 종속이 되서 언체크 예외로 보통 한다고 하셨는데요. 그럼 리포지토리를 체크 예외로 구현해놨으면 서비스에서 @Transaction 애노테이션을 추가해도 롤백 처리가 안된다는 건가요?? 회사에서 back-to-back으로 서비스 단에서 다른서버로 API를 호출할 때 롤백을 해야 하는 경우, 롤백처리를 어떻게 해야 하나요??이런 경우에는 서버에서 내려주는 응답을 보고 언체크 예외를 발생시켜서 트랜잭션이 롤백할 수 있게 해줘야 하는건가요?

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
Wind Thomas 댓글 1 좋아요 0 조회수 294

주 테이블 대상 테이블이 뭔가요?

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

더 자주 접근하는 테이블을 주 테이블이라고 일컫는건가요?

  • java
  • jpa
skkud.inflearn1 댓글 2 좋아요 0 조회수 547

싱글톤에서 ConcurrentHashMap을 쓰더라도 map객체가 공유됩니다...

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] @RestController @RequestMapping("/test") public class TestController { private Map<String, Object> map = new ConcurrentHashMap(); @ModelAttribute private void data() { map.put("data", "abcd"); } @GetMapping("/data1") public Response<Map<String,Object>> datas1() throws InterruptedException { map.remove("api"); synchronized (map) { map.put("api", "efgh"); } Thread.sleep(3000); return Response.success(map); } @GetMapping("/data2") public Response<Map<String,Object>> datas2() { map.remove("api"); synchronized (map) { map.put("api", "ijkl"); } return Response.success(map); } } 위와같이 @ModelAttribute를 메소드레벨에 선언하여 AOP의 안티패턴 느낌으로 사용해보려고 로직을 구현해봤는데 싱글톤 동시성 문제를 고려해서 ConcurrentHashMap을 전역변수로 지정하고 사용하는데도 data1 요청 후 3초가 지나기전 data2 요청을 하니 data1 요청 결과가 data2 요청 결과로 찍힙니다. data1 작업이 종료 되기전(3초이내)에 data2 작업으로 map객체를 초기화 해버리는걸로 보아 map객체가 공유가 되고 있다는것인데... ConcurrentHashmap으로 이러한 동시성 문제가 해결되지 않는 이유가 뭐고,,, ConcurrentHashmap을 사용하여 처리할만한 적절한 코드가 있을까요? 추가적으로 private ThreadLocal<Map<String, Object>> map = ThreadLocal.withInitial(ConcurrentHashMap::new); @ModelAttribute private void data() { map.get().put("data", "abcd"); } @GetMapping("/data1") public Response<Map<String,Object>> datas1() throws InterruptedException { map.get().put("api1", "efgh"); Thread.sleep(3000); return Response.success(map.get()); } @GetMapping("/data2") public Response<Map<String,Object>> datas2() { map.get().put("api2", "ijkl"); return Response.success(map.get()); } 위와같이 ThreadLocal을 활용하면 이 문제가 해결되긴 합니다. 가급적 AI 말고 우리의 리빙레전드 영한이형님께서 직접 답변 해주시길 부탁드리겠습니다 ㅠㅠ

  • spring
  • mvc
  • concurrenthashmap
  • 동시성
  • 싱글톤
  • threadsafe
kate 댓글 1 좋아요 0 조회수 313

파일 open시, 질문

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

혹시 intellij에서 프로젝트 open할 때, 프로젝트 폴더가 아닌, build.gradle 파일을 선택해서 open하는 이유가 있을까요?

  • spring
  • mvc
재영 댓글 1 좋아요 1 조회수 213

RequestMapping 질문

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] "/a/b/c"에 해당하는 URL 호출이 있다고하고, 클래스단위에서 "/a/b"를 RequestMapping으로 등록하고, "/c"를 메소드 단위에서 ReqeustMapping으로 등록하였을때, IntelliJ프로젝트 내 검색기능(cmd+shift+R)을 사용하여 "/a/b/c"와 맵핑되어있는 컨트롤러를 찾으려고 "/a/b/c"를 검색했을때 컨트롤러 검색이 되지않는데, 검색을 할 수 있는 방법이 따로 있을까요? 정리하자면, 클래스, 메소드 단위로 RequestMapping을 쪼갰을때, 전체 경로에 매핑된 컨트롤러를 찾는 방법을 알고 싶습니다.

  • spring
  • mvc
유류캠 댓글 1 좋아요 0 조회수 285

EntityManager와 멀티쓰레드

미해결

실전! Querydsl

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] EntityManager가 멀티스레드 상황에서 안전하게 작성되있다고 하셨는데 그걸 확인하기 위해서는 어느 부분을 확인하면 될까요? 제가 queryFactory와 비슷하게 작동하는 외산 패키지를 쓰고 있는데 그것도 멀티스레드에 안전한지 확인하고 싶어서 질문 남깁니다.

  • java
  • jpa
angelican1 댓글 1 좋아요 0 조회수 279

양방향 매핑 시 stackoverflow 발생

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 템플릿] 1. 예 2. 예 3. 예 [질문 내용] 양방향 매핑 시 순환 참조때문에 toString 메서드에서 StackOverflowError가 발생할 수 있는데, toString 메서드에서 연관관계 참조 부분은 제외하는 방법으로 해결해서 사용하는 것이 일반적인가요? toString 메서드는 AutoValue나 IDE의 도움을 받아 작성하는 것이 일반적인 방법이라고 알고 있는데(이펙티브 자바 등등), 위 방법처럼 stackoverflow만 피하는 것이 옳은 방법인지 궁금해서 질문합니다.

  • java
  • jpa
ckdgus1713 댓글 2 좋아요 0 조회수 286

HQL과 JPQL의 관계

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 안녕하세요 HQL과 JPQL의 관계를 정확히 알고 싶습니다. https://docs.jboss.org/hibernate/orm/4.3/devguide/en-US/html/ch11.html The Hibernate Query Language (HQL) and Java Persistence Query Language (JPQL) are both object model focused query languages similar in nature to SQL. JPQL is a heavily-inspired-by subset of HQL. A JPQL query is always a valid HQL query, the reverse is not true however. Both HQL and JPQL are non-type-safe ways to perform query operations. 라고 되어있는데, 그럼 hibernate 구현체에서 JPQL을 작성하게 되면 hibernate에서 내부적으로 이를 해석한 후 HQL로 변환해서 처리하는 것인가요? OKKY - JPQL 에서 limit 절이 왜 저는 될까요?? JPQL에서 limit절 지원 안된다는 내용을 접했었는데 해당 글에서 처럼 limit을 추가하니 작동을 잘됐습니다. 그래서 찾아보니 HQL이 이를 지원한다라고 되어있는데.. JPQL에선 지원이 안되는데 HQL에서는 지원이 된다라는 내용이 좀 이해가 잘 안가서 둘의 관계에 의문을 갖게 되었습니다 감사합니다

  • java
  • jpa
MJkim 댓글 1 좋아요 0 조회수 485

Hello JPA - 애플리케이션 개발 강의 질문드립니다.

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요! 다름 아니라 [ Hello JPA - 애플리케이션 개발 강의 ]를 따라가면서 하고 있는데, 강의와 다르게 나옵니다ㅠㅠ 이런 식으로 id 1L인 member를 먼저 등록한 다음, 드래그 한 부분의 id를 2L로 바꿔주고 다시 서버를 띄우면 강사님께서는 서버를 다시 띄워도 이렇게 1L과 2L이 나오는데 저는 서버를 다시 띄우면 2L만 나옵니다. rollback을 안 했는데도 id 2만 등록되어있습니다. 그리고 이렇게 했을 때 강사님께서는 위에 아이디 1과 2의 member가 등록되어있는 상태에서 돌리셨기 때문에 System.out.println("findMember.id = " + findMember.getId()); System.out.println("findMember.name = " + findMember.getName()); 이 부분이 잘 출력되는데 저는 rollback이 되어 출력이 안 됩니다.. 무슨 차이일까요? 강사님께서 제공해주신 <최신 프로젝트 설정하기>로 다운로드 받아 진행하였습니다.

  • java
  • jpa
Clain 댓글 1 좋아요 1 조회수 240

인텔리제이 String 오류?

미해결

김영한의 실전 자바 - 기본편

가끔 String 쓰면 실행은 되는데 이렇게 오류나거나, 실행도 안 되고 오류가 뜰 때가 있는데 왜 그런건 가요? 같은 프로젝트 파일에서도 될 때가 있고 갑자기 안 될 때가 있습니다

  • java
  • 객체지향
wk 댓글 1 좋아요 0 조회수 234

대략적인흐름

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 대략적인 흐름을 보았을때, 결국 try catch문으로 예외처리를 하지 않고 컨트롤러에서 오류가 발생해서 이 예외가 WAS까지 가버리면 무조건 서버 오류 500 에러가 뜨니까, 상황에 맞춰서 400,404에러등등을 나타낼수 있게 하기 위해서 ExceptionResolver등을 사용하는것을 배운다고 이해하면 될까요?

  • spring
  • mvc
동현 댓글 1 좋아요 0 조회수 309

섹션4 01-02-emotion 에러가 나는데 못찾겠습니다ㅜ

해결됨

[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스

설치가 잘못된 걸까요.. yarn dev하니 오류가 납니다ㅜ

  • react
  • node.js
  • seo
  • graphql
  • next.js
leeyunje96 댓글 1 좋아요 1 조회수 218

main 함수 실행이 안되요

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. spring-io에서 만들어서 intellj에서 실행했는데 실행이 되지가 않습니다 뭐가 문제일까요 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.

  • java
  • spring
  • mvc
  • spring-boot
밀라이 댓글 2 좋아요 0 조회수 919

상속 구조 내에서 Querydsl로 특정 타입의 엔티티에만 조인

해결됨

실전! Querydsl

안녕하세요, 질문이 있어서 글 남기게 되었습니다. 이런식으로 지점(branch)명에 맞는 공간(space)중 미팅룸 리스트를 보여주고 해당 미팅룸의 해당 날짜의 예약들도 보여주는 기능을 구현하고자 @Override public List<Reservation> findReservationListByDateAndBranchName(LocalDateTime startDatetime, LocalDateTime endDateTime, String branchName) { return queryFactory .select(reservation) .from(reservation) .join(reservation.space, space).fetchJoin() .join(space.branch, branch) .where(branch.branchName.eq(branchName), reservation.reservationStartDateTime.between(startDatetime, endDateTime), space.dtype.eq("MeetingRoom") ) .fetch(); } 이런 코드를 작성하였는데 아래와 같은 연관관계 때문에 Reservation Entity @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "reservation") public class Reservation extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "reservation_id") private Long reservationId; @Column(name = "reservation_start_date_time") private LocalDateTime reservationStartDateTime; @Column(name = "reservation_end_date_time") private LocalDateTime reservationEndDateTime; @OneToMany(mappedBy = "reservation") private List<MemberReservation> memberReservations = new ArrayList<>(); @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "space_id") private Space space; } Space Entity @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Inheritance(strategy = InheritanceType.JOINED) @Table(name = "space") @DiscriminatorColumn public abstract class Space { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "space_id") private Long spaceId; @NotNull @Column(name = "space_name") private String spaceName; @NotNull @Column(name = "space_floor") private int spaceFloor; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "branch_id") private Branch branch; @OneToMany(mappedBy = "space") private List<Reservation> reservations = new ArrayList<>(); @NotNull @Column(name = "dtype", insertable = false, updatable = false) private String dtype; } Space를 상속받는 FocusDesk, MeetingRoom, RechargingRoom @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "focus_desk") public class FocusDesk extends Space { //추후에 해당 엔티티에 맞는 필드들 추가 } @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "meeting_room") public class MeetingRoom extends Space { @Column(name = "meeting_room_capacity") @Positive private int meetingRoomCapacity; } @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "recharging_room") public class RechargingRoom extends Space { //추후에 해당 엔티티에 맞는 필드들 추가 } select r1_0.reservation_id, r1_0.created_date, r1_0.last_modified_date, r1_0.reservation_end_date_time, r1_0.reservation_start_date_time, s1_0.space_id, s1_0.dtype, s1_0.branch_id, s1_0.space_floor, s1_0.space_name, s1_2.meeting_room_capacity from reservation r1_0 join (space s1_0 left join focus_desk s1_1 on s1_0.space_id=s1_1.space_id left join meeting_room s1_2 on s1_0.space_id=s1_2.space_id left join recharging_room s1_3 on s1_0.space_id=s1_3.space_id) on s1_0.space_id=r1_0.space_id join branch b1_0 on b1_0.branch_id=s1_0.branch_id where b1_0.branch_name=? and r1_0.reservation_start_date_time between ? and ? and s1_0.dtype=? 이런 쿼리가 나가게 됩니다. 처음에는 dtype 없이 MeetingRoom 만 join 하고 싶었지만 reservation.meetingRoom 이불가능하여(reservation은 space랑 매핑 되어있으니까) 불가능하여 이방법 밖에는 떠오르지 않았습니다. 문제는 위의 쿼리처럼 쓸모없는 테이블들을 강제로 조인한 후에 다시 where절의 dtype으로 구분을 해야한다는 것입니다. @Query("SELECT new com.example.sabujak.reservation.dto.ReservationQueryDto(r.reservationStartDateTime, r.reservationEndDateTime, s.spaceId, s.spaceFloor, s.spaceName, m.meetingRoomCapacity) " + "FROM Reservation r " + "JOIN r.space s " + "JOIN MeetingRoom m ON m.spaceId = s.spaceId " + "JOIN s.branch b " + "WHERE b.branchName = :branchName " + "AND r.reservationStartDateTime BETWEEN :startDateTime AND :endDateTime") 이런식의 jpql로는 해결이 가능하지만 추후에 정렬조건을 동적으로 받아야 하기에 querydsl을 사용해서 최대한 좋은 방향으로 사용하고 싶은데 어떻게 해야할지 잘 모르겠습니다

  • java
  • jpa
말차 댓글 2 좋아요 0 조회수 479

인기 태그

인프런 TOP Writers

주간 인기글