월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 스프링 데이터 JPA
연관관계 매핑을 하였는데 원하는 결과가 안 나옵니다.
김영한 강사님!!! 늘 좋은 강의 감사 드립니다. 다름이 아니라 강의 내용을 참고로 예제를 만들어서 실행을 하는데 원하는 결과가 출력이 안되서 질문 드립니다. 첨부파일로 텍스트 파일로 캡쳐를 해서 보내 드립니다. UserRepositoryTest클래스에서 read() 메서드를 실행하면 원하는 결과값이 콘솔창에나오질 않습니다. 연관관계 매핑을 하였는데 답변 부탁 드립니다. 감사합니다.
- 해결됨실전! 스프링 데이터 JPA
커맨드와 쿼리를 분리하라는 말이 잘 이해가 가질 않습니다.
현재 강의를 단계적으로 쭉듣고 있는데 커맨드와 쿼리를 분리하라는게 잘 이해가 가질 않습니다. 커맨드는 무엇을 얘기하는것인가요? 쿼리는 sql말씀하시는거 맞으신가요? 답변 부탁드립니다!
- 미해결실전! 스프링 데이터 JPA
마지막 부분 이해가 ㅠ,ㅠ
쿼리 메소드 - 벌크성 수정 쿼리 에서 질문이 있습니다!! 글로 적는거 보다 코드 밑에 TODO 통해 적는것이 이해하는게 편할꺼 같아서 이렇게 질문 드립니다! TODO로 남겨드렸습니다! 혹시 글자가 작은가요? ㅠ,ㅠ
- 미해결실전! 스프링 데이터 JPA
JPQL로 join select를 했을떄 fetch = FetchType.LAZY로 적용했는데도 불과하고
JPQL로 join select를 했을떄 fetch = FetchType.LAZY로 적용했는데도 불과하고 쿼리문을 보면 inner join을 해서 나오는데요 무슨말이면 @Query("select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) from Member m join m.team t") 이 단락을 보면 패치조인이 아니라 일반적인 조인을 했을경우 sql 중심으로 select 하는게 아니라 entity 중심으로 select 하기 때문에 이렇게 Member 연관관계를 맺은 Team이 지연로딩으로 셋팅했기 때문에 n + 1 로 member select 하고 연관관계인 team을 select 해야되지 않나요? 로그 보면 query문이 inner join으로 되어 있어서요... 이게 해당 비지니스 로직인데요 그럼 디버깅 체크 되기 전 save 했을때 이미 1차 캐시에 저장이 되어서(선배님의 JPA 기본편 보니 이렇게 되어 있어서요.. 혹시 제가 잘못 알고있었나요? ) inner join 으로 나가게 되는건가요? 어 그럼... DB에 커넥션 해서 가져오는게 아니라서 query문이 안나와야 하는데.. 혼동되네요 ㅠ,ㅠ 이상으로 좋은 강의를 만들어주셔서 감사드리고 잘 부탁드립니다! 감사합니다.
- 미해결실전! 스프링 데이터 JPA
mappedBy를 사용한 경우
예제 도메인모델과 동작확인 강의에서 보다 질문드립니다. 13분08초쯤에 member 엔티티에 changeTeam부분을 보면, team.getMembers().add(this) 부분이 필요없는 거 아닌가요? 기초강좌에서 mappedBy를 사용하면 엔티티의 주인이 아니라고 배운것 같은데, 굳이 저렇게 추가를 해줘야 하는 이유가 있을까요?
- 해결됨실전! 스프링 데이터 JPA
프록시 엔티티매니저
안녕하세요 강의 잘 보고있습니다. @PersistenceContext를 통해 주입받은 엔티티매니저를 사용하면 매 호출 마다 '프록시 엔티티매니저'가 생성되는 걸로 알고있습니다. 1.이 때 매번 생성하는 프록시 엔티티매니저와 연결되는 실제 엔티티매니저 또한 매번 생성되는건가요? 2. 1이 맞다면 매번 생성된 실제 엔티티매니저들은 영속성 컨텍스트를 공유하는건지, 엔티티매니저마다 영속성 컨텍스트를 갖는건지 궁금합니다!! 3. 혹시 관련 내용이 교재에 있나요??
- 해결됨실전! 스프링 데이터 JPA
강의에는 없는 내용이지만.. cache 관련해서 질문이 있습니다.
안녕하세요. 저는 기본편을 듣고 이제 스프링 data jpa 를 막 완강한 직장인입니다. 저는 사실 현업에서 jpa에서 사용하고 있는데 제대로 이해하지 못한채 사용하고 있다는 생각이 들어서 이번 연휴때 강의 두개를 완독하게 되었습니다. 궁금한점은.. jpa 의 2차 캐쉬 부분입니다. 아쉽게도 강의에서는 다뤄지지는 않은듯한데 책에 있는 cache 부분을 읽고도 아직 남아있는 의문이 있어서 질문 드립니다. cache 가 springframework 의 Cacheable 와 javax 의 Cacheable 이 있는데요. 책에서는 javax 것을 사용하면 영속성 컨텍스트 관리 로직들(hit 시에 1차 캐쉬를 복사해서 주는 등..)을 해준다고 하고 그것이 스탠다드 인 것은 이해했는데요. 1. 혹시 springframework 의 Cacheable 을 사용하면 아예 안되는 것인가요? 사실..제가 mybatis 와 redis 캐쉬로 되어있는 레거시 코드를 jpa 로 옮겨서 현업에서 사용하고 있는데요. 캐쉬를 javax 것이 있는지도 모르고 관습적으로 springframework 것을 사용했습니다..ㅠㅠ 현재 동작에는 큰 문제는 없는데 가끔씩 동시성문제가 발생하는데 혹시 그게 이 영향일까 싶기도 하고 그래서요. jpa와 springframework 의 cache와의 조합에 대한 견해가 궁금합니다. 2. 책에도 그렇고 jpa 2차 캐쉬 구현체에는 ehcache 예제만 나와있고 구글링한 다른 자료들에도 주로 ehcache 만 소개되던데요. 저는 서버 인스턴스를 여러대를 띄우는 상황이라 이왕이면 글로벌 캐쉬를 사용하고 싶었는데 redis 캐쉬도 사용이 가능한지요? 혹시 이것도 jpa 에서는 글로벌캐쉬보다는 ehcache 가 스탠다드한 방식인건지..그렇다면 그 이유가 무엇인지 궁금합니다. 강의 내용과 상관 없는 질문이라 죄송합니다.
- 미해결실전! 스프링 데이터 JPA
JPA와 Transaction에 대해서
안녕하세요. 선생님! 오랜만에 또 질문남깁니다..! 강의내용에서 JpaRepository의 구현체에 @Transactional 애노테이션이 붙어있기 때문에 서비스계층에 없어도 트랜잭션이 적용된다고 하셨습니다. JPA의 모든 변경은 트랜잭션 안에서 동작한다고도 하셨구요! 여기서 질문입니다. Repository를 직접 정의하고 사용할 때, @Transactional 애노테이션 없어도 동작하는 이유는 뭔가요? 더 쉬운 예제로 Controller에서 em.find() 호출이 가능한데, 이유가 뭔지 궁금합니다.. EntityManger의 구현체에 @Transactional이 붙어있나 싶어 em.getClass()를 찍어보았는데, class com.sun.proxy.$Proxy113 이렇게 찍혀서 구현체를 어떻게 봐야하는지를 모르겠어요.. @RestController @RequiredArgsConstructor public class MemberApiController{ private final EntityManager em; @GetMapping("/api/v1/member") public Member getMemberV1(){ return em.find(Member.class, 1L); //트랜잭션 설정을 안했는데 왜 가능할까요? } }
- 미해결실전! 스프링 데이터 JPA
data-jps 프로젝트 start Spring 최초 실행시 오류 발생
spring.io 싸이트에서 강의 내용을 기준으로 진행을 하면 하기와 같은 Error 가 발생합니다. 강의 내용 중에 .. intelij 상의 Setting Popup 설정에서 Builder.Execution, Deployment >> Maven >> Gradle 에서 "Gradle JVM" 항목의 Java 1.8 이 설정된걸로 보이지만, 실제 저의 Intelij 상에는 "openjdk-14" 설정 됩니다. 강의 내용 처럼 설정해야 되는건 아닌가요? Error:Cannot run program "C:\Users\sjh70\.jdks\openjdk-14.0.1-1\bin\java.exe" (in directory "C:\Users\sjh70\AppData\Local\JetBrains\IdeaIE2020.1\compile-server"): CreateProcess error=2, 지정된 파일을 찾을 수 없습니다
- 미해결실전! 스프링 데이터 JPA
안녕하세요. 다른강의에 대한 질문이 있어서 질문드립니다.
현재 스프링부트와 JPA활용편 1,2에 대한 구매를 고민하고 있습니다. JPA활용편 1,2에 있는 내용들이 책에도 있는내용인지 궁금합니다.
- 미해결실전! 스프링 데이터 JPA
@Query 에 countquery를 설정했음에도 안나간는 경우?
안녕하세요 정말 좋은강의 잘듣고 있습니다. 혹시 countquery옵션을 설정했음에도 안나가는 경우가 있을까요? 이전 jpa 활용2 에서 order 객체를 기반으로 springdata jpa repository 를 만든후 아래와 같은 메서들를 정의했는데 @Query(value = "select o from Order o join fetch o.member m join fetch o.delivery d",countQuery = "select count(o) from Order o")public Page<Order> findAllWithMemberDelivery(Pageable pageable); 결과값은 count 문없이 아래와 같은 쿼리만 나가네요 select order0_.order_id as order_id1_6_0_, member1_.member_id as member_i1_4_1_, delivery2_.delivery_id as delivery1_2_2_, order0_.delivery_id as delivery4_6_0_, order0_.member_id as member_i5_6_0_, order0_.order_date as order_da2_6_0_, order0_.status as status3_6_0_, member1_.city as city2_4_1_, member1_.street as street3_4_1_, member1_.zipcode as zipcode4_4_1_, member1_.name as name5_4_1_, delivery2_.city as city2_2_2_, delivery2_.street as street3_2_2_, delivery2_.zipcode as zipcode4_2_2_, delivery2_.status as status5_2_2_ from orders order0_ inner join member member1_ on order0_.member_id=member1_.member_id inner join delivery delivery2_ on order0_.delivery_id=delivery2_.delivery_id limit ? 혹시 inner join 이라 따로 다시 조회할 이유가 없어서 스프링에서 최적화해서 따로 쿼리가 나가지 않은건가요?
- 미해결실전! 스프링 데이터 JPA
@QueryHint의 readOnly 와 @Transaction의 readOnly 차이
안녕하세요. @QueryHint 의 readOnly 속성과 관련하여 질문있습니다. 이전의 강의(jpa 활용 1편) 에서 service 단에 @Transaction(readOnly=true) 설정을 주었을 때 영속성 context flush (X), dirty checking (X) 를 통해서 성능을 최적화하고 DB에 읽기 전용임을 알린다고 배운게 기억이 나서요. 정리하자면 1. @QueryHint 의 readOnly 속성은 (how) 스냅샷을 만들지 않음으로써 (what) Dirty Checking의 비교를 하기 위해 내부적으로 객체를 2개(스냅샷) 만들어 메모리 낭비하는 것을 방지 2. @Transaction(readOnly=true) 속성은 (how) DB에 반영할 것이 없다는 것을 암시하여 영속성 context flush 를 하지 않도록 하여 (what) dirty checking 안 함 -> 성능 최적화 으로 이해를 했는데요. 왠지 두가지 방법이 매우 유사한 것 같아 이와 관련하여 구글링 하던 중 https://vladmihalcea.com/spring-read-only-transaction-hibernate-optimization/ 위 글을 봤는데 제가 이해하기로는 위 글에서 얘기하는 Entity loaded state 가 말씀하신 스냅샷이고 강의와 동일하게 'queryHint-readOnly를 통해 생성을 막을 수 있다.' 라고 하면서 작성자 본인이 기존에 Transactional-readOnly를 사용했을 때 Entity loaded state(스냅샷) 생성이 막히지 않아 git pull 요청을 해서 spring 5.1에서 적용됐다는 것 같은데요. 제가 이해한게 맞는지 그렇다면 @Transaction(readOnly=true)를 @QueryHint-readOnly속성과 동일한 기능으로 보고 대체하여 사용할 수 있는지 궁금합니다. 감사합니다.
- 해결됨실전! 스프링 데이터 JPA
Spring jpa repository
안녕하세요 이번강의도 정말 잘듣고 있습니다. 다만 궁금한 점이 있다면..스프링 JpaRepository를 쓰면 jpa에 종속적인 repository가 만들어지지 않을까요? 원래 repository 패턴을 장점중 하나가 (캐쉬,api,nosql)등 구체적인 데이터 소스에 대한 의존성을 줄이기 위함이라 알고 있는데.. 실무에서는 사실상 적용하기는 개발공수에 비해 얻는 이점이 크지 않는건가요? 실무에서 그럼보통 nosql로 변경되거나 api로 변경되면(거의 없겠지만) 거의 대부분을 다시 작업하나요? 그리고 혹시 jpql사용시 join 과 fetch join의 차이점은 select 할때 받아오는 컬럼에만 차이가 있는건가요?
- 미해결실전! 스프링 데이터 JPA
도메인 락 관련 질문
위와같이 Order와 Product Entity가 N:M매핑일 때 1.Order에 대해서 락을 걸고싶은데 이럴경우 OrderItem에 관해서도 락을 걸어주는게 맞는지 궁금합니다 ㅠㅠ OrderItem까지 락을 걸어버리면 컬렉션에 값이 추가될때마다 업데이트 쿼리가 계속 늘어나가지고 성능적으로 문제가 생길거같아서.. 2.애그리거트 단위로 락을 걸어주는게 좋은건가요 ??
- 미해결실전! 스프링 데이터 JPA
별건 아닌데 pdf파일에 오타가 있습니다.
public Class BaseEntity extends BaseTimeEntity 인데PDF에는 public Class BaseEntity extends BaseEntity 라고 되어있습니다...!
- 미해결실전! 스프링 데이터 JPA
인터페이스 상속 관련 질문
안녕하세요 커스텀 리포지토리 네이밍 관련 궁금한점이 있습니다. 커스텀 리포지토리를 실수로 MemberRepositoryCustomImpl로 네이밍했는데 MemberRepositoryCustom을 Impl한 클래스로 인식이 됐는지 MemberRepositoyTest에서도 정상적으로 동작했습니다. 네이밍을 MemberRepositoryCustomImpl로 한 것과 MemberRepositoryImpl로 한것과 기능상 차이가 있을까요?
- 해결됨실전! 스프링 데이터 JPA
API 통신 시, @Transactional 사용 관련 질문 드립니다.
안녕하세요. 강사님 매번 질문을 남겨 볼까, 말까 고민하다가 처음으로 질문 드립니다. 저는 SpringDataJpa를 먼저 사용하다가, 강사님 강의를 통해 JPA와 queryDSL을 공부하고 있습니다. 또한, 사내에서 신규 프로젝트 또는 레거시 프로젝트를 작업할 때 SpringDataJpa를 도입해 나가고 있습니다. 현재 API 통신을 하는 메서드를 작성할 때, API 통신 전 과 후 히스토리를 남기고 있는데 @Transactional 없이 한 메서드에서 사용을 하고 있습니다. 제가 생각할 때 잘못 사용 하다가, 원치 않는 결과를 초래할 수도 있을 것이라 생각이 들어서 아래 예제 코드와 같이 사용하고 있습니다. 그러나 요즘 들어 제가 작성하는 코드가 효율적이지 못하다는 것과 update와 관련된 부분은 영속성컨텍스트 내에서 이뤄져야 하지 않을까란 생각이 들었습니다. 조언을 얻을 수 있는 분이 주위에 많이 안 계셔서 이렇게 부끄럽지만 질문 드립니다. 감사합니다. @Transactional에 noRollback 옵션을 주고, 적절한 timeOut 시간을 정의해서 사용하면 괜찮을까요?? ex) //API 통신 전 히스토리 생성 Hist updHist = histRepository.save(hist); //API 통신 ResponseEntity<Result> exampleResult = restTeamplte.postForEntity(uri,HttpEntitiy,Result.class); result = exampleResult.getBody(); //API 통신 후, 히스토리 업데이트를 위한 값 변경 메서드 (setter) updHist.updateResult(result.getCd(),result.getMsg()); //히스토리 업데이트 historyRepository.save(updHist);
- 미해결실전! 스프링 데이터 JPA
h2 접속오류 부탁드립니다.
ㅇ문제가 무엇일까요.
- 미해결실전! 스프링 데이터 JPA
다른 엔티티 저장 할때
1대N 관계인 두 엔티티를 동시에 저장할때 save메서드는 각각의 엔티티에 트랜잭션으로 처리하는거 같은데 하나의 트랜잭션으로 묶고 두 엔티티를 저장할 방법이 있나요??
- 미해결실전! 스프링 데이터 JPA
@Query 사용시 @Param 어노테이션이 필수 인가요?
안녕하세요 강사님 강의 보는중에 궁금한점이 생겨서 질문 드립니다 ^^ 쿼리 메소드 사용 강의 중에 @Query 사용에 대한 강의를 보다가 @Query 선언한 메소드에 사용하는 파라미터 변수들에게 @Param 어노테이션을 정의해주시는데요 해당 역할은 전 강의에서 설명해주셔서 알고는 있는데 @Param 이 없어도 잘 동작하는거 같아서요 ^^; 사용하는것이 권장되어야 할지 궁금합니다!