25%
66,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 스프링 데이터 JPA
11:52 질문 flush
안녕하세요 이전 강의에서 jpql을 쓰면 flush는 자동으로 돤다고 알고있습니다. 그런데 11:52에서 jpql을 쓰시고 또 다시 flush를 하면 다른점이 있을까 궁금해서 질문합니다 감사합니다 (flush를 주석처리해도 동일하게 age=41이 나오긴합니다)
- 해결됨실전! 스프링 데이터 JPA
무제한 스크롤 관련 질문 드립니다.
타임라인 형태 조회 API를 제공 하려다가 중복에 관한 문제에 직면하여 조언을 얻고 자 합니다. 데이터가 로드 된 후. 신규 데이터가 등록 / 삭제 등 프로세스가 일어 난 다음에 다음 페이지를 호출 할 때 생기는 이슈 입니다. pageRequest, slice로 구현 시 신규 데이터가 입력 된 경우 중복으로 데이터가 보이는 케이스가 생기고, 삭제 된 경우 예상치 못하게 데이터가 빠지는 현상이 있습니다. ex) 주어진 데이터 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 size 5 1페이지에 10, 9, 8, 7, 6 이 뿌려 진 상태 조회 된 상태에서 신규 데이터 12, 11 이 추가 됩니다. 이 상태에서 2페이지를 호출 합니다. -> db에서는 12~8까지를 1페이지 7~3까지를 2페이지로 판단하여 7, 6, 5, 4, 3 을 더보기로 뿌려주며 7, 6 번이 중복으로 리스트에 보이게 되고 있습니다. 이 강의는 들은지 4개월이 넘었는데 모바일 더보기 관한 내용을 말씀하셨던 것 같아서 오늘 다시 들어봤지만 Slice의 내용 이었고 제가 직면한 이슈는 아직 해결 되지 않았네요. 조사를 좀 해보니. 오라클의 rownum 같은..? 성격의 데이터로 어디까지 데이터를 불러 왔는지에 대한 값등으로 해결 한다고 찾긴 했는데요. 그 방향으로 native쿼리로 해결을 해볼까 고민하다가 영한님/배민에서는 어떻게 처리 할까 궁금해서 질문을 남깁니다. 제가 못 찾는건지 jpa에서 이러한 이슈 해결해주는 기능을 지원해주는지도 궁금합니다. (없는 것 같네요 ㅠ) 날씨 추운데 건강 챙기세요. 명강의 잘 보고 있습니다.
- 미해결실전! 스프링 데이터 JPA
안녕하세요 다시 들으니 햇갈리네요 Slice
안녕하세요 Slice 는 페이지 번호랑 상관이 없는거같은데 ( 페이지 total을 안져옴) -초반에 말씀해주신 모바일 설명 을 듣고 Silce 는 무한 스크롤 할때 사용하는거같은데... 그런데 페이지 번호 메소드는 가지고 있는게 햇갈립니다 assertThat(page.getNumber()).isEqualTo(0); //페이지 번호 (14:53 참고) =================== 두번째 질문 map() 으로 dto 변환은 람다식 map() 이거랑 일치하는거죠 ??
- 미해결실전! 스프링 데이터 JPA
쿼리만드는 것에 질문이 있습니다
JpaRepository를 상속받고 어떤 쿼리를 만들고 싶습니다 예를 들어 유저정보 중 lastName 과 city를 기준으로 검색하는 쿼리를 만들고 싶은데 검색파라미터로 lastName, city 가 있을 때 lastName = null, city = null전체 데이터 조회 lastName != null, city = nulllastName 으로 같은 것 검색 lastName = null, city != nullcity 로 같은 것 검색 lastName != null, city != nulllastName , city 모두 같은 것 검색 이렇게 되는 쿼리 함수를 작성하고 싶은데 이걸 각각 함수를 만들어서 하지 않고 한 번에 쿼리를 빌드할 수 있는 방법이 있을까요?
- 미해결실전! 스프링 데이터 JPA
NamedQuery
@NamedQuery는 어플리케이션이 로딩 시점에 문법 에러가 있으면 에러를 뱉는 이유가 어플리케이션이 로딩할때 쿼리문을 파싱해서 보관 하고 있다고 생각하면 될까요 ? 그래서 결론적으론 파싱 과정에서 에러가 있으면 오류를 뱉는거구요.
- 미해결실전! 스프링 데이터 JPA
update 실무
안녕하세요 ㅎㅎ 실무적으로 궁금한게 하나 있어서 질문드립니다 update 쿼리는 실무에서도 100% 더티체캉으로 해결하나요 ??
- 미해결실전! 스프링 데이터 JPA
jpaRepository 의존성 주입 중복문제????
안녕하세요 김영환 강사님강의를 들으면서 다른 작업시 이러한 문제가 발생해서 진행이 안됩니다. org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adminBoardController' defined in file [C:\Users\web\projects\xxx-api\build\classes\java\main\com\xxx\xxxapi\controller\admin\AdminBoardController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'articleService' defined in file [C:\Users\web\projects\xxx-api\build\classes\java\main\com\xxx\xxxapi\service\ArticleService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'articleRepository' defined in com.xxx.xxxapi.repository.board.ArticleRepository 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 com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Reason: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article]; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article] Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'articleService' defined in file [C:\Users\web\projects\xxx-api\build\classes\java\main\com\xxx\xxxapi\service\ArticleService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'articleRepository' defined in com.xxx.xxxapi.repository.board.ArticleRepository 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 com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Reason: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article]; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'articleRepository' defined in com.xxx.xxxapi.repository.board.ArticleRepository 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 com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Reason: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article]; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article] Caused by: org.springframework.data.repository.query.QueryCreationException Could not create query for public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Reason: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article]; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article] Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract com.xxx.xxxapi.model.board.Article com.xxx.xxxapi.repository.board.ArticleRepository.findByHeadIdxAndAIdxNot(int,int)! Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article] Caused by: java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [AIdx] on this ManagedType [com.xxx.xxxapi.model.board.Article] 어떤 문제인지 부탁드립니다
- 미해결실전! 스프링 데이터 JPA
save 질문드립니다.
jpa 커리큘럼 듣고있는 학생입니다. 첫 커리큘럼 강의 merge를 쓰지말라고 하셨는데(*1), 스프링 데이터 jpa의 save를 보면(SimpleJpaRepository구현체) merge를 사용하고 있습니다. 그러면 실무에서 스프링 데이터 jpa를 사용할 때 save기능을 사용하여야 하는것인지 사용하지 말아야 하는것인지 가이드 라인이 있을까요? *1.DB에서 데이터를 가지고 오기때문에 sql이 한번 나가는 문제, DB에서 가지고 온 데이터 수정할 때 일정 필드값이 누락될 경우 누락된 값은 변경감지와는 달리 없어지기 때문 등등의 문제로
- 미해결실전! 스프링 데이터 JPA
테이블생성
안녕하세요 강사님. 제가 강의를 다듣고 혼자 프로젝트를 만들어 보는 중인데요.. jpa ddl설정에서 계속 테이블이 생성이 잘 안됍니다... 딱히 오류도 안뜨고.. 뭐가 문제인지 모르겠습니다. ㅠㅠ 디비 접속 아이디와 비밀번호는 일부로 지웠습니다.
- 미해결실전! 스프링 데이터 JPA
복합키가 기본키로 매핑이 된 경우
pk 복합기로 구성되어이있는 경우에 jpaReposioty 인터페이스를 사용하는데 문제가 되어있지 않을까요? @Idclass를 사용해서 복합키를 구성하였을때도 문제가 안될까요? 클래스에 시리얼라이저블도사용해서 매핑한게 있는데 혹시나 문제되는게 생길까요?
- 미해결실전! 스프링 데이터 JPA
JPQL 에 대해서 질문이 있습니다 ..!
안녕하세요 영한님. 영한님의 강의를 한번씩 보고 개인적으로 공부를 하면서 연습을 해오고 있는데. 수업 예제는 아니지만 궁금한 점이 생겨서 검색을 해도 잘 나오지 않아 질문을 남기게 되었습니다. --------------------------------------------------- 상품을 대여하는 기능을 작성해 보기위해 만든 클래스 입니다. 연관관계는 단방향 매핑이 좋다 말씀하셔서 단방향으로 구성을 해봤습니다. 이 클래스에 있는 user는 빌리는 사람의 클래스입니다. product 클래스 안에 상품의 주인인 User클래스를 매핑해 주었습니다. User클래스에는 매핑된 테이블이 없습니다. 이렇게 작성이 되어있고 만약 자신이 대여를 신청한 상품을 조회하고 싶은 쿼리문을 작성하고 싶은데 이렇게 작성을 했었습니다. 하지만 https://www.inflearn.com/questions/15876 이 질문의 글에 fetch 조인에 대상이 되는 곳에는 where절을 사용하면 안된다 말씀을 해주신 것을 보고 다른 방법이 떠오르지가 않아서요 .. 혹시 더 좋은 방법이 있다면 어떠한 방식으로 해결해 나가면 좋을까요? 수업예제와 다른 주제로 질문을 드려 죄송합니다.
- 미해결실전! 스프링 데이터 JPA
캐시 관련해서 질문 드립니다!
안녕하세요! 캐시 쪽 질문 리스트를 찾다가 이전에 어떤 분이 질문해주신 부분을 보고 궁금한 점이 생겨서 질문 드립니다. https://www.inflearn.com/questions/33629 다만 여기서 동시성 문제도 말씀을 하셨는데, 주의해야할 점은 엔티티를 스프링이나 외부 캐시에 저장하면 절대! 안됩니다. 예를 들어 제가 만든 서비스에서 특정 엔티티를 조회할 때 리뷰 캐시 히트 비율이 엄청 높다고 하면 해당 엔티티를 캐싱해두고 필요할 때 가져와서 영속성 컨텍스트에 머지시킨 다음 사용할 수 있지 않을까 라고 생각했습니다. 엔티티를 스프링이나 외부 캐시에 저장했을 때 문제점이 조금 모호해서 구체적인 예를 혹시 알 수 있을까요? 감사합니다!
- 미해결실전! 스프링 데이터 JPA
jpa 여러개 repository findById
안녕하세요... 토이프로젝트를 하다가 궁금한것이 있어서 문의드립니다... 제가 원하는건 결론적으로 이렇습니다. if(){ Test1Repository.findById(Long Id); }else if(){ Test2Repository.findById(Long Id); } else { Test3Repository.findById(Long Id); } 이런식으로 계속 분기처리하기보단 레포지토리를 하나의 값으로 findById를 할수 있는지가 궁금합니다..
- 해결됨실전! 스프링 데이터 JPA
소스코드는 따로 제공되지 않는 것인가요?
안녕하세요! 로드맵을 따라 선생님 강의를 열심히 수강하고 있는 학생입니다. 이전 강의들은 PDF 이외에도 전체 소스코드 파일이 제공되었는데, 이번에는 없는 것인가요? 매번 직접 타이핑하거나 PDF에서 복붙하는것 보다 훨씬 편해서 학습효율에 많은 도움이 되었는데, 이번엔 보이지 않아 아쉬워서 여쭤봅니다.
- 미해결실전! 스프링 데이터 JPA
더티체킹
안녕하세요 학습을 진행하던 중 궁금한 사항이 생겨 질문드립니다. 다름이아니라 더티체킹에 관한것인데요 ```java @Transaction public User updateAuthority(String userName, UserRole new Role) { User user = userRepository.findByUserName(userName); System.out.println("---변경 감지 시작 ---"); user.setRole(newRole); System.out.println("---변경 감지 끝---"); return user; } 아래와 같은 메소드를 실행시켜서 더티체킹이 언제 감지되나 실험해보았는데 보니까 return user를 하고 나서 실행되는거 같더라구요. 혹시 더티체킹이 끝나서 DB에 update 쿼리가 나가는 시점이 정확히 알 수 있을까요? 수업 너무 감사합니다!
- 해결됨실전! 스프링 데이터 JPA
Specification 을 활용하는 RSQL 파서 + Querydsl 의 조합은 어떻게 생각하실지 궁금합니다.
안녕하세요 이제 추워지는데 건강조심하셔요!뭔가 떠오르는게 있을때 강사님의 의견이 가장 궁금한것 같아 또 남기게 되었습니다 RESTful API 구현방식 에서, 서버측에 검색조건에 대한 쿼리로직는 최소화 하도록, 그리고, Client 에서 검색조건 을 제공하도록 조건절이 문법화 된 RSQL 이란것을 알게되었는데요... 이 RSQL 을 파싱하는 rsql-parser 를 통해 Querydsl 의 BooleanExpression 로 변환해주는 기능에 Spring-boot Starter 의존성으로 제공해주는 라이브러리를 하나 발견했습니다. perplexhub/rsql-jpa-specification: Java Library to Translate RSQL into Spring Data JPA Specification and QueryDSL Predicate (github.com) (링크 아래쪽에 Querydsl 설명이 있어요) 저의 눈엔 꿀이 가득한 꿀통을 찾은 느낌같은 느낌인데요.. 서브프로젝트로 진행보려 생각중인데, 실무에서 꺼려지는 기술은, 좋아보여도 따라가다 하얗게 타버리는 하루살이가 될 수 있기때문에..적용하려는 폼만 잡고있습니다^^; 슬쩍 보셨을때 어떤 기분이 드시는지 강사님의 견해가 궁금합니다(JPA Specification 이나 저놈이나 그놈이 그놈일까요?..ㅎㅎ) 읽어주셔서 감사해요
- 미해결실전! 스프링 데이터 JPA
EntityGraph 에서 복합키 조회시 질문드립니다.
public class Product { @Id Long productId; String name;}public class Member { @Id Long uid; String name;}public class MemberInterest{ @Id Long sequence; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "uid", insertable = false, updatable = false, referencedColumnName = "wine_id") Member member; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "product_id", insertable = false, updatable = false, referencedColumnName = "wine_id") Product product; int ratingPoint;} public class PurchaseHistory { @Id Long sequence; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "uid", insertable = false, updatable = false, referencedColumnName = "wine_id") Member member; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "product_id", insertable = false, updatable = false, referencedColumnName = "wine_id") Product product; @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "uid", referencedColumnName = "uid", insertable = false, updatable = false), @JoinColumn(name = "wine_id", referencedColumnName = "wine_id", insertable = false, updatable = false) }) MemberInterest memberInterest;} 안녕하세요 강사님 강사님의 여러 강의를 잘 듣고있습니다. 질문이 두가지 있는데요 위와 같은 관계가 있다고 가정할 때 아래와같이 구매이력을 EntityGraph를 통해 가져오려고 합니다. @Repositorypublic interface PurchaseHistoryRepository extends JpaRepository<PurchaseHistory, Long> { @EntityGraph(attributePaths = {"member", "product", "memberInterest"}) Page<PurchaseHistory> findByUid(String uid, Pageable pageable);} 하지만 실제로 동작시 MemberInterest 부분에서 N+1 문제가 발생하는데요 ToOne 관계이면, 패치조인이 되어 N+1이 발생하면안될것같은데 이 경우는 왜 발생할까요? 그리고 어떻게 해결해야할지도 궁금합니다. 답변기다리곘습니다 감사합니다.
- 미해결실전! 스프링 데이터 JPA
로그인한 유저의 데이터만 조회
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[인사말] 안녕하세요. 김영한 선생님. 현재 IT회사에서 근무하는 주니어-시니어 사이의 개발자입니다. 최근 회사에서 프로젝트를 리더급 개발자로 진행하게 되었고 이에 JPA를 부서내에서 처음으로 도입하며, 공통 기능 및 관련 편의 기능들을 담당하게 되어 개발하고 있습니다. 먼저 하기 기능을 구글링과 스택오버플로우도 계속해서 찾아봤습니다. 아래와 같은 기능을 현재 개발자들이 JPA개발자측에 계속해서 요청하는 기능이라고 확인이 되나, 이 기능을 편법으로라도 적용할 수 있는 방법이 없는지 궁금해서 질의드립니다. ------------------------------------------------------------------- [질문 내용] SELECT문에서 각각의 개발자가 직접 코드를 작성하지 않아도, 로그인한 유저의 데이터만 기본적으로 조건절에 대입하여 제공하는 방법이 존재하는지 확인하고 싶습니다. 해당 조회기능이 단편적으로 일부 테이블에서만 사용한다면 Query를 직접 작성하거나, QueryDSL을 통해서 where절에 user관련 조건절을 각각 집어넣어도 상관없다고 생각합니다. 그러나 로그인한 유저관련 조건절을 거의 대부분의 조회문에 넣고싶을 경우, 간단한 쿼리조차도 Query를 직접 작성하거나 QueryDSL을 써야하는 것으로 알고 있습니다. 반복적인 코드라 굉장히 비효율적이라 생각하여, 해당 기능을 공통으로 사용하고 싶으나, 어떻게 작성해야하는 지 떠오르지가 않았기에, 일단 생각나는 만큼 아래와 같은 방법을 생각하거나 작성해봤습니다. 1. 디자인 패턴이나 Functional Interface을 적용해서 감싸봐도 결국은 각각의 개발자가 QueryDSL을 통해 기본적인 쿼리는 작성해야했습니다. 2. 먼저 데이터를 전부 들고온 뒤, API에서 사용자 관련으로 필터링하는 방법은 성능적으로 굉장히 안 좋은 것 같아서 시도하지 않았습니다. 3. 사용자 테이블을 조회하여 해당 사용자에 연관된 매핑을 타고 내려가야하는 방법은 필요 데이터를 내포하는 테이블에 닿기까지 많은 테이블을 조회해야하고, 데이터가 많은 경우 이도 성능적으로 좋지 않아 결국은 QueryDSL를 사용해야 한다고 생각합니다. Q. 가변적으로 변하는 유저의 값을 원하는 JPA 쿼리에 고정적으로 조건절에 집어넣을 수 있는 방법과 관련하여 문의드립니다. 반복적인 작업을 조금이라도 덜어주고자 노력하고 있는데 쉽지가 않네요.
- 미해결실전! 스프링 데이터 JPA
복합키 식별 관계 매핑에 대해서 여쭈어봅니다.
선생님... 현재 복합키 식별 관계의 mapping에서 선생님 책을 보고 인터넷을 찾아봐도 문제에 부딪혀 해결에 지쳐서 질문을 드립니다. @IdClass(InternetBuzzIdentifier.class)public class InternetBuzz { @Id private String program; @Id private String channel; @Id private String days;... @Getter @Setterpublic class InternetBuzzIdentifier implements Serializable { private String program; private String channel; private String days;... @Entity@Getter@Setterpublic class InternetBuzzMapping { @Id @GeneratedValue private Long id; private String contentId; private String contentsetId; @OneToOne @JoinColumns ({@JoinColumn (name = "program"), @JoinColumn (name = "channel"), @JoinColumn (name = "days")}) private InternetBuzz internetBuzz; public InternetBuzzMapping(InternetBuzz internetBuzz) { this.internetBuzz = internetBuzz; } 처음에는 하나의 repository(InternetBuzz)을 만들었고 둘의 연결관계를 통해서 internetbuzz를 save하면 자동으로 InternetBuzzMapping 테이블에도 program, channel, days값이 들어가길 원하는데 internetbuzz.save()를 하면 internetbuzzmapping 테이블은 그대로입니다. internetBuzzRepository.save(buzz);internetBuzzMappingRepository.save(new InternetBuzzMapping(buzz)); 그래서 internetbuzzMappingRepository를 만들어 위와같이 save를 하려하니 Caused by: java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : racoi.Dto.InternetBuzzMapping.internetBuzz -> racoi.Dto.InternetBuzz 위와같은 에러가 납니다. 어떤게 문제인지 책을 뒤져봐도 잘 이해가 안갑니다 ㅠ
- 미해결실전! 스프링 데이터 JPA
1:N 프로젝션 join
안녕하세요! 중첩 프로젝션에 대해 이것저것 해보는 도중, 1:N에 대해서도 인터페이스를 만들어 해보았습니다. 예를 들어 TeamProjection이 있을 때, 다음과 같습니다. public interface TeamProjection { String getName(); List<MemberInfo> getMembers(); interface MemberInfo{ String getUsername(); } } Team과 member의 관계는 강의에서와 동일하게 1:N 관계입니다. TeamRepository에 메서드를 다음과 같이 정의했습니다. public interface TeamRepository extends JpaRepository<Team, Long> { <T> List<T> findProjectionByName(@Param("name") String name, Class<T> tClass); } 이제 Test를 돌리기 위해 다음과 같이 테스트코드를 짜고 실행했을 때 SQL 결과입니다. @Test @DisplayName("프로젝션 테스트") public void 프로젝션_테스트() throws Exception{ //given Team team = Team.builder().name("team").build(); em.persist(team); Member m1 = builder().username("a").age(10).team(team).build(); em.persist(m1); Member m2 = builder().username("b").age(10).team(team).build(); em.persist(m2); em.flush(); em.clear(); //when List<TeamProjection> r = teamRepository.findProjectionByName("team", TeamProjection.class); //then for (TeamProjection teamProjection : r) { List<TeamProjection.MemberInfo> members = teamProjection.getMembers(); for (TeamProjection.MemberInfo m : members) { System.out.println("member : " + m.getUsername()); } System.out.println("team : " + teamProjection.getName()); } } >> SQL (Team + Member + Member) 총 3회 select team0_.team_id as team_id1_4_, team0_.name as name2_4_ from team team0_ where team0_.name=? ------- select members0_.team_id as team_id4_3_0_, members0_.member_id as member_i1_3_0_, members0_.member_id as member_i1_3_1_, members0_.age as age2_3_1_, members0_.team_id as team_id4_3_1_, members0_.username as username3_3_1_ from member members0_ where members0_.team_id=? -------- select members0_.team_id as team_id4_3_0_, members0_.member_id as member_i1_3_0_, members0_.member_id as member_i1_3_1_, members0_.age as age2_3_1_, members0_.team_id as team_id4_3_1_, members0_.username as username3_3_1_ from member members0_ where members0_.team_id=? 질문) 1:N은 프로젝션 조회를 했을 때 join이 되지 않는 것인지 궁금합니다!