30%
61,600원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 스프링 데이터 JPA
프록시 객체 확인시 사용되는 메소드 질문
안녕하세요 프록시 객체인지 아닌지를 테스트로 확인하고 싶다면 어떠한 메소드를 사용해야하나요?
- 미해결실전! 스프링 데이터 JPA
스프링 데이터 JPA와 JPQL을 함께 사용할 경우 Repository에 대해 질문 드립니다.
김영한님 안녕하세요. 먼저 JPA를 사용함에 있어서 정말 중요한 지식들을 쉽고 좋은 강의를 통해 공유 해주심에 감사 드립니다. 개인적으로 작은 사이드 프로젝트를 진행 하면서 스프링 데이터 JPA를 공부하는 도중에 궁금한 점이 생겨서 이렇게 질문을 드리게 됐습니다. 현재 간단한 조회 쿼리는 스프링 Data JPA의 쿼리 메서드를 통해 해결하고 있고, 강의에서 언급 하셨던 And가 두 개 이상 붙는 조회 쿼리는 JPQL을 통해 해결하려 하고 있습니다. 이 때 JPQL, EntityManager를 직접 사용하는 Repository와 JpaRepository 인터페이스를 분리해서 사용하는 방법, 그리고 @Query 애노테이션을 활용하여 인터페이스 한 곳에서 JPQL을 함께 관리 하는 두 방법 중 어떤 방식이 더 컨벤션에 가까운지 궁금 합니다. 현재 제가 진행하는 사이드 프로젝트는 너무 작은 규모라 사실 한 인터페이스 안에 모든 로직이 다 들어가도 상관이 없겠지만 정말 규모가 큰 실무에서는 어떻게 하는지, 구체적으로는 JPQL도 객체지향 쿼리이기는 하나, 직접 SQL을 짜야 한다는 관점에 있어서는 Dao같은 것으로 따로 분리 해서 관리를 하는건 아닐까? 라는 의문이 들었습니다. 그리고 결국 JPA는 Spring Data JPA, JPQL, QueryDSL 세 가지 기술을 함께 사용 하게 된다는 말씀을 강의 중에 하셨는데요. 이 세 가지 기술을 모두 적용하는 경우에는 Repository가 어떤 구조로 관리가 되는지 알고 싶습니다. 실무 경험도 없고 아직 한창 공부하는 입장이다 보니 이런 질문이 조금은 낯설게 느껴지실 수도 있다는 생각이 드네요 :) 개발 공부가 쉽지 않아서 종종 지칠때도 있는데 영한님 강의 볼 때마다 긍정적인 에너지를 얻어가며 즐겁게 공부 하고 있습니다. QueryDSL강의와 이번에 내주신 스프링 강의까지 열심히 잘 듣겠습니다. 감사합니다.
- 미해결실전! 스프링 데이터 JPA
ddl-auto 관련해서 질문드립니다
강의를 다 듣고 oracle 11g로 테이블 자동 생성 테스트 중에 있습니다 h2데이터베이스 사용중일땐 ddl-auto를 create로 설정하면 DB에 테이블이 없을때도 'drop table ~ if exist'을 통해 테이블이 존재 하는 경우를 체크 한 뒤 삭제하고 재생성해주었습니다 근데 오라클로 설정하니 존재여부를 확인하지 않고 바로 'drop table clip cascade constraints ' 쿼리를 날립니다 당연히 초반에 테이블이 없기 때문에 table or view does not exist라는 에러가 발생하게 됩니다 오라클 DB와 연동할때도 h2처럼 if exist로 존재여부를 확인한 뒤 테이블을 생성하는 방법은 없을까요?
- 미해결실전! 스프링 데이터 JPA
Repository에서 엔티티 명시에 관하여
안녕하세요 강사님! 질 좋은 강의 항상 감사드립니다ㅎㅎ Repository제작할 때 작성하는 엔티티에 관한 질문인데요, 예를 들어 Entity_A 리포지토리 작성할 때 아래와 같이 하는데 public interface 리포지토리 명 extends JpaRepository<Entity_A,id> { } 이 리포지토리 안에서 아래와 같이 @Query("select b from Entity_B ...생략") List<Entity_B> selectEntity_BList(생략) Entity_B에 대한 쿼리를 짜도 일단 작동은 하는 것 같았습니다. 이런식으로 extends에 명시한 엔티티와 다른 쿼리를 짜도 문제는 없는건가요? 만약 별 문제가 없는 것이라면 extends측에 적어주는 엔티티명이나 id는 리포지토리 고유 기능인 save,findId 등을 위해서 적어주는 것이라 봐도 무방할까요? 아직 배우는 단계라 질문이 많네요ㅠㅠ 읽어주셔서 감사합니다:D
- 미해결실전! 스프링 데이터 JPA
jpql return타입에 관한 질문입니다!
안녕하세요! jpa 기본편 강의부터 활용1,2를 거쳐서 스프링데이터 jpa를 듣고있는 학생입니다! jpql을 쓸때 반환타입이 명확할때는 타입쿼리 명확하지 않을때는 쿼리를 사용하고 이걸 줄여서 getResultList나 getSingleList를 사용해 List, 단일 객체로 반환받을수 있다고 알고있습니다. (또한 "select m from Member m", Member.class 이렇게 쿼리문 뒤에다가는 Member.class라는 반환값을 적어주는걸로 알고있었습니다) 활용1편에서는 jpql을 사용할때 getResultList와 함께 반환값인 Member.class를 적어주셨는데 @Query나 여기서는 Member.class를 적지않고 하셔서 메소드의 리턴값을 List<Member>로 적어줬기때문에 Member.class를 적어주나 안적어주나 상관이 없는건가? 아니면 스프링데이터JPA가 해주는건가? 라는 생각이 들었는데 제 생각일뿐이라서.. 명확한 이유를 알고싶어서 질문을 올렸습니다!(적으나 안적으나 테스트 결과는 같게 나왔습니다!) 그리고 질문올릴때 마다 항상 친절하게 답변해주셔서 감사합니다ㅎㅎ
- 미해결실전! 스프링 데이터 JPA
@PreUpdate 시 @Transient 필드 null 로 대입되는 현상 관련 문의
안녕하세요, 스프링 데이터 JPA 관련 강의들을 잘 듣고 있습니다. (다 보았지만 다시 볼 예정입니다 ㅎㅎ..) @PreUpdate 관련하여 기대한 바와 다른 동작이 확인되어 문의드립니다. Audit 관련 정보를 기록하려 하고, 이때 Listener 를 사용하지 않고 등록일/등록자 를 저장하고자 합니다. Board 게시판은 MyAudit 클래스를 상속하고 있으며, MyAudit은 userId라는 @Transient 가 적용된 필드를 가지고 있습니다. @PrePersist public void prePersist() { creator = userId; // userId는 preUpdate가 속해있는 class field 로써 @Transient 적용 createAt = LocalDateTime.now(); modifier = userId; // userId는 preUpdate가 속해있는 class field 로써 @Transient 적용 updateAt = LocalDateTime.now(); } @PreUpdate public void preUpdate() { modifier = userId; // userId는 preUpdate가 속해있는 class field 로써 @Transient 적용 updateAt = LocalDateTime.now(); } PrePersist는 의도한 바처럼 Transient 필드 값을 가지고 저장하나, preUpdate의 경우 modifier에 null이 대입이 됩니다. Listener를 쓴다면 해결이 되겠지만 @PreUpdate에서 Transient 필드가 왜 null이 되는지 궁금합니다. 그리고 의도한 바처럼 Transient 필드의 값을 PreUpdate 시점에 가져와서 대입이 가능할지 문의드립니다.
- 해결됨실전! 스프링 데이터 JPA
DDD 와 실무
삭제된 글입니다
- 미해결실전! 스프링 데이터 JPA
같은 테이블 fetch join 시 N+1 문의드립니다.
안녕하세요. 게시판 연습중에 문의가 생겨서 질문드립니다. 게시판 글을 등록하고 해당 글을 여러명이 수정하거나 삭제(상태변경) 할수 있는 방향으로 진행중인데요 아래 그림과 같이 Article에서 Member를 ManyToOne으로 세개의 다대일 단방향을 만들었습니다. 단건 글조회 호출쿼리를 실행했을때 처음 creator 부분은 fetch join이 정상적으로 되지만 이후의 modifier와 deleter는 따로 두번 쿼리가 호출되는 증상이 있는데요 마지막 그림 쿼리의 경우 전부 fetch join을 해도 같은 증상이라 이와 같은 구성의 경우 처음 호출시에만 fetch join이 되는건지 궁금합니다 ㅠㅠ < BaseEntity > <글 Entity> < 호출 쿼리 >
- 미해결실전! 스프링 데이터 JPA
안녕하세요
안녕하세요. 강사님 2편. 활용편 까지 강의를 덕분에 정말 잘 들었습니다. 다음 강좌를 듣기전에 개인적으로 몇 번씩 복습해보고 배운내용을 바탕으로 혼자 주제를 정해서 만들어보는 연습을 하고 있습니다. 해당강의와 연관이 없는 질문이지만 연습을 하면서 코딩도 코딩이지만 설계하는 부분도 개인적으로 어렵고 중요하다고 느꼈습니다. 그래서 혹시나 스스로 공부하면서 간단한 웹 어플리케이션 도메인 - 테이블설계를 참고할 수 있는 방법을 여쭤보고 싶습니다. 소스코드는 찾기 쉬워도 테이블설계 예제는 어디서 찾아야할지 아직은 잘 모르겠네요.. 이제 막 공부를 하고 있는 단계여서 그런지 앞선 강의에서 쓰인 간단한 예제와 비슷하게 모델을 새로 만들어보는데도 완벽하게 설계하기가 어렵네요. 그래도 이전 강의들 덕분에 어찌어찌 구상한 내용을 코딩하는데는 전혀 지장없이 재밌게 하고있습니다. 감사합니다.
- 미해결실전! 스프링 데이터 JPA
초기 어플리케이션 기동이 오래 걸립니다.
오라클과 mssql을 동시에 테스트하고 있습니다. 근데, 오라클을 연동하여 어플리케이션 기동할 때 너무 오래 걸립니다. entity와 db 맵핑을 validation하는 과정에서 오래 거리는 듯합니다. 혹시 원인을 알 수 있을까요? (반면, mssql은 기동시간도 짧고, validation오류가 발생하더라도 빨리 발생합니다.) 오라클은 로컬에 18c express버전으로 설치되어 있고, jdbc jar파일은 오라클 홈에서 18버전에 맞는 걸로 다운 받았습니다.(ojdbc8.jar) 아래는 기동 시 오류로그 일부분입니다. ======================================================================================== INFO 20-09-02 17:33:12[restartedMain] [LogHelper:31] - HHH000204: Processing PersistenceUnitInfo [name: default] INFO 20-09-02 17:33:13[restartedMain] [Version:44] - HHH000412: Hibernate ORM core version 5.4.12.Final INFO 20-09-02 17:33:13[restartedMain] [Version:49] - HCANN000001: Hibernate Commons Annotations {5.1.0.Final} INFO 20-09-02 17:33:13[restartedMain] [HikariDataSource:110] - HikariPool-1 - Starting... INFO 20-09-02 17:33:13[restartedMain] [HikariDataSource:123] - HikariPool-1 - Start completed. INFO 20-09-02 17:33:14[restartedMain] [Dialect:172] - HHH000400: Using dialect: org.hibernate.dialect.Oracle12cDialect WARN 20-09-02 17:34:55[restartedMain] [AnnotationConfigServletWebServerApplicationContext:558] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [USE_YN] in table [EF_USER_VIEW]; found [char (Types#CHAR)], but expecting [varchar2(255 char) (Types#VARCHAR)] INFO 20-09-02 17:34:55[restartedMain] [HikariDataSource:350] - HikariPool-1 - Shutdown initiated... INFO 20-09-02 17:34:55[restartedMain] [HikariDataSource:352] - HikariPool-1 - Shutdown completed. INFO 20-09-02 17:34:55[restartedMain] [StandardService:173] - Stopping service [Tomcat] INFO 20-09-02 17:34:55[restartedMain] [ConditionEvaluationReportLoggingListener:136] - Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. ERROR 20-09-02 17:34:55[restartedMain] [SpringApplication:826] - Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [USE_YN] in table [EF_USER_VIEW]; found [char (Types#CHAR)], but expecting [varchar2(255 char) (Types#VARCHAR)] ================================================================
- 미해결실전! 스프링 데이터 JPA
성능 테스트 질문
안녕하세요 영한님 강좌 잘 보고있습니다. 강좌중에 성능테스트에 대한 이야기를 많이 해주시는데, 혹시 성능 테스트는 어떤식으로 진행해야 할까요?!
- 미해결실전! 스프링 데이터 JPA
강의 보면서 프로젝트 진행 중에 오류가 발생했습니다..
Member가 있고 Dept 엔티티가 있습니다. Member 리파지토리에 다음과 같이 작성했구요. @Query(value = "select m from Member m left join fetch m.dept where m.dept.unit_code = :code")List<Member> findMembersByUnitCode(@Param("code") String code);멤버를 1명 추가 했을 때는 해당 Dept에 해당하는 멤버가 잘 나오다가.. 테스트로 Dept dept12 = new Dept("12", "***팀", "", ""); memberRepository.save(new Member("1",dept12,"","","","","","","","","")); memberRepository.save(new Member("2",dept12,"","","","","","","","","")); memberRepository.save(new Member("3",dept12,"","","","","","","","",""));이런식으로 멤버를 저장하고 위 findMembersByUnitCode를 실행 하면org.springframework.dao.IncorrectResultSizeDataAccessException: query did not return a unique result이런 에러가 납니다.. ㅠㅠh2데이터베이스에서 select 했을 때는 데이터가 정확히 잘 들어가 있는데, 왜 이런 에러를 보내는 걸까요?
- 미해결실전! 스프링 데이터 JPA
강의 감사합니다. 추후 강의 계획 문의
안녕하세요. JPA에 대하여 학습을 하고자 강의를 듣기 시작하여 1편,2편,dataJpa까지 듣고있는 수강생 입니다. 다음으로 dsl까지 학습할 계획이네요. ^^ 강의가 진짜 정말 많이 내용이 좋고 재미도 있어요.ㅋㅋㅋㅋ 문의드릴점은 혹시 jpa와 캐싱전략 관련 강의는 예정에 있는지 문의드립니다. REST API 의 캐싱전략, redis, guava등 유익한 강의가 될 것 같아서요. 감사합니다.
- 미해결실전! 스프링 데이터 JPA
Repository 테스트 관련 질문입니다.
안녕하세요 강사님. 항상 좋은 강의 잘 듣고 있습니다. 레파지토리 테스트코드를 작성하면서 의문점이 들어서 질문 올립니다. 1. 보통 레파지토리 기능을 테스트할 때는 인메모리 DB 환경에서 테스트를 진행하나요? 2. 인메모리 외 개발DB 환경(mysql, oracle 등)에서 테스트를 진행한다면 개발DB 데이터를 가져와서 테스트를 진행해도 되나요? 아니면 데이터를 생성하는 테스트 코드를 작성하고 테스트를 진행해야하는지 궁금합니다.
- 미해결실전! 스프링 데이터 JPA
단축키질문입니다.
cmd + n를 눌렀을 때 constructor생성이 있긴한데, 빈 constuctor 생성이 바로 되버리는데, 강사님처럼 선택할 수 있는 화면이 나오게하려면 어떻게해야할까요?
- 해결됨실전! 스프링 데이터 JPA
여러 테이블에 공통 조회조건을 추가하는 방법?
삭제된 글입니다
- 미해결실전! 스프링 데이터 JPA
질문드립니다.
9:17초에서 changeTeam 함수를 보다가 문득 질문이 들어 질문 남깁니다. 함수명 자체는 팀을 '바꾼다'는 의미를 가지고 있는데 list에 add를 해주는 방식(team.getMembers().add(this))으로 구현하셨습니다. 그러면 리스트에 있던 기존 데이터객체의 jpa에서 알아서 update되는지, 아니면 무시하고 새로 add 되는지 궁굼합니다.
- 미해결실전! 스프링 데이터 JPA
spring data jpa 강의 수강 도중 질문입니다.
강의를 즐겁게 보며 학습하는 학생입니다. 개발 도중 테스트 실행 결과가 영한님처럼 잘 나오지 않고 이상하게 나오는 문제가 있는데요, 이럴땐 어떻게 해야 잘 볼 수 있을까요?? 감사합니다. https://github.com/dkyou7/JPA_data-jpa
- 미해결실전! 스프링 데이터 JPA
CollectionTable사용시 fetch 조인에 대해서
안녕하세요! 기본 빼고는 전부 완강했습니다. 좋은 강의 감사합니다! 강의를 다듣고 여러가지 실습을 해보고 있는데요. OneToMany 일대다 fetch조인은 하나의 테이블에 대해서 밖에 안되는데 일대다 관계의 CollectionTable조인은 여러 테이블에 대해서도 에러가 안나고 N+1 문제도 발생하지 않더군요. CollectionTable도 결국은 테이블에 대한 조인인데 왜 문제 없이 테이터를 가지고 올 수 있는지 궁금합니다.
- 미해결실전! 스프링 데이터 JPA
Member member로 바로 받아서 출력 질문있습니다!
안녕하세요 영한님. 진행 중에 출력이 잘 되지 않아서 질문드립니다. @GetMapping("/members2/{id}") 이 부분을 Member member로 바로 받아서 return member.getUsername()을 해보니깐 1 만 출력이 되길레 member 를 print 해보았더니Member(id=null,username=1,age=0) 라고 뜹니다.DB에는 정확히 들어가 있는 것은 확인되는 상태입니다. 무엇이 문제일까요 ??