25%
66,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 스프링 데이터 JPA
userRepository가 수정시 값을 가져오지 못합니다.
안녕하세요. 선생님강의를 벌써 4개 수강하고 있습니다. 제가 회사에서 맡은 프로젝트 중에 @createBy, @lastModifiedBy 값을 사용하여 사용자 정보를 itemRepository에 넣어야하는 게 있습니다. 선생님 강의 auditing과 듣고 마찬가지로 헀는데... 이게 이상한것은 insert시는 user repository에서 user의 정보를 잘 가져오는데... update시는 user repository의 값을 가져오지 못하고 nullable을 에러가 납니다. auditing기능은 잘 작동하는데.. 아무래도 item repository가 연결되어있어서 user repository값을 가져오지 못하나라는 생각이 들다가.... insert시에는 유저 아이디를 잘 가져와 넣는데 수정시에만 유저아이디 찾는 로직이(user.findByuserName)이 nullpoint에러가 난다는 것입니다. 며칠째 삽집할다가 여쭤봐요 ㅠㅠ
- 미해결실전! 스프링 데이터 JPA
insert에 대해서 문의드립니다.
안녕하세요 김영한님:) 실무 적용 중에 궁금한게 있어서 문의 드리는데요. 보통 entity내에 joinColumn이든 mappedBy든 연관관계를 성립 시켜주는데요 그냥 단순히(?) 주문생성(주문관련된 테이블들에 insert이 이루어짐)만 이루어진다면 굳이 연관관계 맵핑을 하지 않고 각 주문관련 테이블들에 하나씩 컨트롤 하면서 insert 하는게 편리할 것 같다는 생각이 들어서.. 이런 접근 방법이 맞을까요? 물론 테이블 간 FK로 묶여 있는 테이블들도 있긴 한데 이런 경우는 위 처럼 하면 JPA의 객제관점으로 테이블에 접근 하는 관점에서는 어긋나는것 같기도 하고...영한님의 의견은 어떠실까요? 참고로 이 서비스는 사실상 주문관련 테이블은 insert만 이루어지고 select는 상태값 정도 조회하는 신규 api 입니다. 쿼리가 아닌 JPA 관점에서 접근하는 게 생각보다 딱 이거다 이런게 명확하지 않으닌까 생각이 진짜 많아지는것 같아요 ㅠㅠ 감사합나다.
- 미해결실전! 스프링 데이터 JPA
안녕하세요 궁금한게 있어서 질문 하나 드려봅니다!!!
강사님 언제나 강의 잘듣고 있습니다 감사합니다.다름이 아니라 Item 의 @Id 타입이String 으로 변경되었는데ItemRepository 안 JpaRepository 값을 Long -> String 으로 바꿔야 하지 않나요?? 바꾸지 않고 진행을 해도 save 는 잘돌아 가던데 (그외 Id 의 타입이 필요한 method 호출시는 오류가 뜨지만..)그럼 실질적으로 PK 값으로 굳이 넣지 않아도 되는건가요??
- 미해결실전! 스프링 데이터 JPA
엔티티 매핑 default 값
영한님 안녕하세요! 영한님은 엔티티 매핑시 default 값을 어떻게 넣는지 궁금해서 질문 드립니다 몇 가지 방법을 생각해 보았는데 1. @Prepersist를 통해 넣는다. 2.밑과 같이 그냥 값을 넣어준다. 제가 생각나는건 2개정도인데 영한님은 어떤식으로 default값을 넣어주시나요?
- 미해결실전! 스프링 데이터 JPA
update 관련해서 질문 드립니다.
안녕하세요. 김영한님:) 영한님의 JPA강의를 들으면서 실무에 바로바로 적용하는 중에 있는데요. 1. 엔티티에 setter를 사용 하지 않고 수정 및 데이터 저장시 entity내에 메소드를 만들어서 사용하는걸 권장해주셨는데, 큰 덩어리(?)에 entity에서 하나의 컬럼만 수정이 될 때도 말씀주신 메소드를 만들어서 사용 하는게 좋을까요? 2. prodQty = prodQty + 1 이렇게 바로 DB 컬럼만으로 update가 가능한것도 select한 것을 param으로 넘겨서 메소드로 만들어서 하는게 좋은걸까요? 개인적으로 repository내에 @Modifying을 이용해서 만드는게 더 가식적인고, 한개의 업데이트를 사용하기에도 더 편리해보인다는 라는 생각도 들어서요(물론 @Modifying은 벌크성 update에 주로 이용한다고 하셨지만...) JPA에 익숙하지 않는 습성(?)때문에 그렇게 느껴지는 부분일까요? 더티체킹이라는 JPA는 장점을 살리지 못한 생각일까요? 강의 들을때 이해가 퐉퐉! 되었는데 막상 실무에선 작은것도 많은 고민을 하게 되네요 ㅠㅠ 감사합니다.
- 해결됨실전! 스프링 데이터 JPA
Update관련 질문드립니다
안녕하세요 영한님 강의 항상 잘 보고있습니다. 강의를 보면서 Update는 Dirty Checking을 통해서 해라!(단건) 라고 이해를했는데요 궁금한 부분은 정말 단순하게 컨트롤러로 DB에 있는 어떤 값을 변경하는 API가 있다고 하면 해당 엔티티를 조회하고 이 엔티티에 값을 바꾸면 select 쿼리 한번 update 쿼리 한번이 나가게 되는데 다른 JDBCTemplate 이나 Mybatis 쓰면 update 쿼리한번이면 될텐데 라는 생각이 들더라구요 물론 DB에 데이터를 있는지 없는지 체크도 되는 이점도 있긴하겠지만 만약에 엄청 복잡해서 update를 하기위한 select를 해야하는 경우가 많다고 한다면 이부분이 성능에 미치는 영향이 크지는 않는건지랑 대비 이점?이 무엇인지 궁금합니다~
- 미해결실전! 스프링 데이터 JPA
entity listener 관련 질문드립니다.
안녕하세요, 강의 자체와 밀접한 관련은 아니지만, entity listener을 사용해보려던 중 궁금한 점이 생겨 질문드립니다. postUpdate, preUpdate ... 등등 엔티티가 변경되거나 등록되거나 삭제된 전후로 감시하는 것이 아니라, 항시 감시하려고 할 때도 entity listener을 이용하나요? 원하는 로직은, 상품 엔티티가 있고, 유통기한 컬럼을 감시해서 날짜가 지났을 시 삭제하는 등의 처리를 하고 싶습니다. 이러한 경우에는 어떤식으로 사용할 수 있을지 질문드립니다. 항상 좋은 강의 감사합니다.
- 해결됨실전! 스프링 데이터 JPA
@Trasacntion 롤백 관련 질문있습니다.!
안녕하세요 ~ 강사님. JPA는 트랜잭션 단위에서 RuntimeException이 발생하면 롤백을 진행한다고 배웠는데요~ 실습중에 예외 케이스를 발견해서 질문 드립니다.!! @SpringBootTest@Transactional@Rollback(value = false)class HumanTest { @Autowired HumanRepository humanRepository; @Autowired EntityManager em; @BeforeEach void setup() { Human human = new Human(); human.setName("human"); humanRepository.save(human); } @Test void t1() { List<Human> all = humanRepository.findAll(); Human human = all.get(0); human.setName("person"); throw new IllegalArgumentException(); // rollback }} 테스트에서 분명 예외가 발생했기 때문에 db에 human을 조회하면 name이 `human`이 나올거라 예상했는데, person이 나오더라고요..!! 이거 관련해서 답변을 얻을 수 있을까요? 좋은 강의 항상 감사합니다.
- 미해결실전! 스프링 데이터 JPA
@MappedSuperclass대신 임베디드 타입
안녕하세요 영한님! 강의 정말 잘 듣고 있어요! 이번강의를 듣다고 궁금한 점이 생겼는데요 등록일이나 수정일을 임베디드 타입으로 처리하지 않고 @MapperSuperclass로 채택해 구현한 이유가 단순히 수정일과 등록일은 데이터 참고용 컬럼이라 그런건가요? 임베디드 타입보다 등록,수정일을 @MapperSuperclass로 구현한 부분에대한 장점이 따로 있을까요?
- 미해결실전! 스프링 데이터 JPA
안녕하세요? JPA 학습 관련해서 문의 드립니다!
안녕하세요 김영한 개발팀장님! 저는 서버 개발자로 일을 하고 있는 주니어 개발자입니다! 다름이 아니라 이번에 스프링 프로젝트 서버 담당 업무를 맡게되어 급하게 선생님 스프링 data jpa 강의를 수강하고 있는데요, 처음부터 기초 지식이 없는 상태에서 바로 데이터 JPA 강의를 수강하는게 조금 어려움을 겪고 있어서, 선생님이 출판하신 자바 ORM 표준 JPA 프로그래밍 책에서 필수적으로 어느 챕터들을 우선적으로 선행 학습하면 좋을지 질문 드리고 싶습니다. (예를 들면 JPA 기본편 강의에서 다루신 기초적이고, 핵심적인 내용들) 위에서 질문을 통해 말씀드린 것처럼, JPA 기본편과 활용편 강의 대신, 해당 책으로 기본적인 것들을 공부하고 데이터 JPA 강의를 수강해도 괜찮은 방법일까요? 좋은 강의 제공해주셔서 감사합니다 ^^
- 해결됨실전! 스프링 데이터 JPA
이번 강의에서 궁금한 점이 생겼습니다.
안녕하세요 영한님. 이번 시간에 다양한 반환 타입에 대해 강의해주셨는데요. 영한님 따라서 실습을 하다가 아무거도 해도 됩니다! 라는 말씀에 다음과 같이 말도 안되는 Method를 만들어봤는데요. 잘 동작하네요 '-' ? ㅎㅎㅎ; 먼저 Repository에 다음과 같이 이상한 네이밍으로 만들었습니다. 그리고 테스트는 간단하게, 이번 강의의 연장선에서 다음과 같이 작성했고, 값이 제대로 도출되는 것을 확인했습니다. 쿼리 역시 select member0_.member_id as member_i1_0_, member0_.age as age2_0_, member0_.team_id as team_id4_0_, member0_.username as username3_0_ from member member0_ where member0_.username=? 로 나오고 있는데요. 추가로, 제가 find다음에 소문자가 아닌 대문자로 작성해줘야 동작을 하더라구요! (find / ~~~ / By / Username) 즉, 키워드 구분! - findaaaaaaaaaByUsername (X) - findAaaaaaaaaByUsername (O) aaaaaaaa와 같이 이상한 네이밍이 들어가도 제대로 동작하는 이유는 뭘까요? 참고할만한 내용이 있다면 키워드 추천 해주시면 감사하겠습니다!!늘 강의 잘 보고 있습니다! 항상 감사합니다 영한님!
- 미해결실전! 스프링 데이터 JPA
상속관계 매핑 전략에 관한 질문
안녕하세요. 김영한님 JPA로 프로젝트를 구성중에 궁금한 점이 있어 문의 드립니다. payment와 paymentInicis entity의 상속관계 매핑 전략을 @Inheritance(strategy = InheritanceType.JOINED) 조인전략으로 진행 했는데요. (조회 시 한꺼번에 조회 + 테이블 정규화 관점에서 해당 전략을 사용 했습니다.) payment insert과 동시에 paymentInicis에 FK만 데이터만 있는 상태로 (대부분의 컬럼 null) insert이 되는데 혹시 저 전략을 쓴 상태에서 payment만 insert이 되게 할 수 있는 방법은 없을까요? 해당 스텝에서는 payment만 insert되고, paymentInicis는 그 다음 스텝에서 insert이 되었으면 해서요. 바쁘시겠지만 답변 부탁드릴게요. 감사합니다.
- 미해결실전! 스프링 데이터 JPA
mybatis 같은 다른 레파지토리 사용시 적용이 가능한가요??
Auditing 사용시 mybati는 따로 넣어 직접적을 넣어 주어야 하나요? 아님 다른 방법을 통해 같이 사용이 가능한가요??
- 미해결실전! 스프링 데이터 JPA
데이터 중심 테이블 설계와 객체 중심의 테이블 설계
안녕하세요 김영한 스승님. JPA를 공부하다가 갑자기 궁금한게 생겨서 질문드립니다. 객체 중심의 테이블 설계와 데이터 중심의 테이블 설계가 차이점이 어떤것인가요? RDB도 객체처럼 테이블을 만들 수 있는데 그러면 굳이 객체중심으로 테이블을 설계할 필요가 없는거 아닌가요? 이 부분이 너무 헷갈려서 질문드렸습니다...
- 미해결실전! 스프링 데이터 JPA
add(this) 관련 질문입니다.
9분 23초입니다. public void changeTeam(Team team) { this.team = team; team.getMembers().add(this); } 초보적인 질문이라서 쑥쓰럽네요.. .add(this)가 잘 이해가 되지 않아서 질문드립니다. 기본적인 this문법은 이해하고 있는데 해당 문장에서의 this를 잘 모르겠습니다.
- 미해결실전! 스프링 데이터 JPA
김영한 개발자님의 조언을 구하고 싶습니다
Q. 질문은 api uri 를 만드는 규칙에 관련된 것입니다. 여러 회사가 있을 때 "회사에 소속된 팀 조회" & "회사에 소속된 사원 조회" 를 하는 api를 만들 경우 아래에 있는 두 가지 방법 중 어떤 것이 옳을까요? 1. /회사/{id}/팀 /회사/{id}/멤버 2. /팀?회사id=1 /멤버?회사id=1 **제 생각 저는 1번이 맞다고 생각했으나, 더많은 정보가 있을 때 /회사/{id}/장비 /팀/{id}/멤버 등 api 개수가 너무 많아지는 문제가 있다고 생각되었습니다. 2번의 경우도 더많은 정보를 고려하면 /멤버?회사id=1&팀id=2&성별=남 하나의 uri가 너무 많은 기능을 담당하게 되는 문제가 있다고 생각되었습니다. 신입 개발자로써 많은 고민을 했지만 결론이 나오지 않아서 이름있는 선배 개발자님과 소통할 수 있는 유일한 창구가 인프런이기에 부득이하게 질문하게 되었습니다 ㅠㅠ.. 답변 해주시면 정말 감사하겠습니다.
- 미해결실전! 스프링 데이터 JPA
페이징 질문
안녕하세요 선생님! 강의를 듣다가 궁금한게 생겨 몇 가지 질문드립니다. 1. @Query를 이용해서 jpql 페치조인을 한 경우, 페이징을 하려할때 다음과 같은 에러가 뜹니다. @Query("select m from Member m join fetch m.team") Page<Member> findFetchJoinTeam(Pageable pageable); @Testvoid member(){ Team teamA = teamRepository.save(new Team("teamA")); memberRepository.save(new Member("member1", 40, teamA)); memberRepository.save(new Member("member2", 40, teamA)); memberRepository.save(new Member("member3", 40, teamA)); PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Sort.Direction.DESC, "username")); Page<Member> fetchJoinTeam = memberRepository.findFetchJoinTeam(pageRequest);} Failed to load ApplicationContext java.lang.IllegalStateException: Failed to load ApplicationContext Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberRepository' defined in com.example.forq.MemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Count query validation failed for method public abstract org.springframework.data.domain.Page com.example.forq.MemberRepository.findFetchJoinTeam(org.springframework.data.domain.Pageable)! paging에서 count 부분이 문제인것 같은데 entitygraph로 하면 잘 돼서 제가 뭔가를 놓친건지 궁금합니다 public interface MemberRepository extends JpaRepository<Member, Long> { @Override @EntityGraph(attributePaths = {"team"}) Page<Member> findAll(Pageable pageable);} 2. where 등으로 필터링을 하지 않을떄는 countQuery를 분리해서 최적화를 하면된다고 하셨는데 만약 select m from Member m join m.team t where t.name=:name ”같이 조인 대상에 필터링을 하는 경우에는 어떻게 최적화를 할 수 있는지 궁금합니다. 감사합니다!
- 미해결실전! 스프링 데이터 JPA
오타 제보드립니다.
안녕하세요 강사님 오타 제보 드립니다. 최근에 업무가 바빠서 못듣다가 다시 달려 봅니다! pdf 파일 18 페이지 요약 : alias 이름 오타 @Repository public class TeamJpaRepository { //수정전 public List<Team> findAll() { return em.createQuery("select m from Team t”, Team.class) .getResultList(); } //수정후 public List<Team> findAll() { return em.createQuery("select t from Team t”, Team.class) .getResultList(); } } 좋은 하루 보내세요! 감사합니다.
- 해결됨실전! 스프링 데이터 JPA
즐겁게 듣겠습니다~~~
어느덧 여기까지 왔어요 ㅎㅎ 이번 강의도 즐겁게 듣겠습니다. 항상 잘 듣고있어요
- 미해결실전! 스프링 데이터 JPA
CountQuery 관련 질문이 있어서 하나 올립니다.
MemberRepository 아래 처럼 쓰고 @Query(value = "select m from Member m left join m.team t", countQuery = "select count(m) from Member m where m.age = :age")Page<Member> findByAge(@Param("age") int age, Pageable pageable); memberRepository 에서 아래처럼 받게되면 int age = 10;PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Sort.Direction.DESC, "username"));//whenPage<Member> page = memberRepository.findByAge(age, pageRequest); parameter not bound 오류가 나게 됩니다.countQuery 에는 paramater binding 을 쓰지 못하는 걸까요??