월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨실전! 스프링 데이터 JPA
EntityGraph 이용시 컬렉션 페치조인의 경우 질문
안녕하세요!JPQL로 엔티티 페치조인이 아닌 , 일대다 입장에서 컬렉션 페치조인을 할 경우 -> 데이터 뻥튀기 문제가 발생하여 distinct 키워드로 뻥튀기된 데이터를 없애주어야 했느데요 , EntityGraph를 이러한 컬렉션 페치조인에 사용하여도 distinct를 쓴것 처럼 데이터 뻥튀기 문제가 발생하지 않는지 궁금합니다. 감사합니다.
- 미해결실전! 스프링 데이터 JPA
em.createQuery의 두번째 argument에 대해
안녕하세요!em.createQuery() 메소드를 호출할 때, 첫 번째 인자는 jpql를 넣어주고,두 번째 인자에는 반환할 타입을 명시하는 것이라 이해했습니다. public <T> TypedQuery<T> createQuery(String qlString, Class<T> resultClass);하지만 두 번째 인자를 넣지 않더라도 경고만 뜨고 컴파일 오류는 나지 않는데, 필수적인 인자값이 아닌건가요?또 넣었을 때와 넣지 않았을 때 차이점이 무엇인가요??감사합니다
- 미해결실전! 스프링 데이터 JPA
아래 질문 글 Yong.K 님의 질문의 답변에 관한 질문글 입니다 - flush관련
아래 질문글 Yong.K 님의 글에 대한 답변으로 ,JPQL이 실행되기 전 flush가 되지만이때 flush는 em.flush() 처럼 영속성 컨텍스트를 완전히 flush 시키는 것이 아니라 ,실행될 JPQL과 관련된 엔티티만 부분적으로 fluish 시키는 것이라고 설명해주셨습니다.하지만 이렇게 부분적으로만 flush 시킨다면 ,벌크연산 후 clearAutomatically에 의해 영속성 컨텍스트가 비워져 버리면 문제가 생길 수 있어,벌크연산의 옵션으로 flushAutomatically가 있고 - 이 옵션을 활성화 시키면 em.flush()를 호출한 것 처럼 완전히 flush 되는것으로 이해하였습니다. 그렇다면 벌크연산 사용시 flushAutomatically 옵션을 비활성화 시키고 - clearAutomatically 옵션만을 활성화 시킨다면 여전히 문제가 발생할 여지는 남아있는 것이 맞는지 궁금합니다.즉 그렇다면 결과적으로 clearAutomatically 옵션만 활성화 시키는게 아니라 , flushAutomatically 옵션도 함께 활성화시켜야 하는것은 아닌지 궁금합니다.
- 미해결실전! 스프링 데이터 JPA
Optional로 깜싸서 반환하는 것에 대한 사소한 질문
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하십니까. 강의를 들으면서 컬렉션 조회시 Optional로 감싸지 않는 이유가 제가 생각한게 맞는지 궁금해서 질문 남기게 되었습니다. 단건 조회시 데이터가 없으면 null이 반환되는데 , 이 null을 까딱 잘못 처리하면 예외가 터지기 때문에 더 안전한 Optional로 감싸서 사용을 많이 하는데요 , 반면 컬렉션 조회의 경우 조회한 데이터가 없어도 null이 아니라 빈 컬렉션이 반환되기 때문에 - 이러한 사실만 잘 인지하고 있으면 , 굳이 컬렉션을 Optional로 감싸지 않아도 컬렉션의 사이즈 정보를 가지로 처리를 할 수 있기 때문에 반환타입을 명시할 때 단건 조회의 경우 Optional로 감싸는 형태를 많이 사용하고 컬렉션 조회의 경우 그냥 컬렉션 타입 그대로 명시하는게 일반적인 흐름인지 여쭙고 싶습니다. 사소한 질문 들어주셔서 감사합니다.
- 미해결실전! 스프링 데이터 JPA
멤버가 팀을 옮길 때는 기존 팀의 리스트에서 안 빼줘도 되나요?
새로 이전하는 팀의 .getMembers()에 add(this)만 하시길래 여쭤봅니다.
- 미해결실전! 스프링 데이터 JPA
JPA 연관관계 관련하여 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 영한님설명이 어려워 예시를 들어서 설명하겠습니다.예를 들어 이력서 테이블이 있고, 이력서_이미지라는 테이블이 있다고 가정하겠습니다.```이력서 table- id(auto increment)- 이름- 학력- 경력- 등등이력서_이미지- id(auto increment)- resume_id - type(경력에 들어가는 사진인지, 학력에 들어가는 사진인지)- 이미지 path``` @Entitypublic class Image { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "resume_id") private Resume resume; @Enumerated(EnumType.STRING) private ImageType type; private String imagePath;} @Entitypublic class Resume { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 경력 사진 List @OneToMany(mappedBy = "resume", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) private List<Image> careerImages = new ArrayList<>(); // 학력 사진 List @OneToMany(mappedBy = "resume", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) private List<Image> educationImages = new ArrayList<>();} 질문 1. 부모 객체(Resume)에서 이렇게 자식객체(Image)의 Type에 따라서 다른 list를 들고 오고 싶은데 이건 어떻게 설정하면 될까요??- @Converter를 사용해야할까요??질문 2. @OneToMany로 list를 들고올때 10개만 들고 오게 한다거나 이런 것도 가능할까요?
- 미해결실전! 스프링 데이터 JPA
findMemberDto에서 setTeam하는 방법에 대해
안녕하세요 수업을 듣다 의문이 들어 질문 남깁니다. findMemberDTO() 작성시 team을 set하는 부분에서 아래와 같이 하셨는데 (테스트코드 크게 신경쓰시지않고 하신걸로 생각되는데..) Member m1 = new Member("AAA", 10);m1.setTeam(team);아래와 같이 연관관계편의 메소드(changeTeam)를 통해 작성된 생성자 (3rd param이 team 주입)를 사용하는게 양방향 정합성 측면에서 나은게 아닌지 생각되어 질문드립니다. Member m1 = new Member("AAA", 10,team); 연관관계편의메소드 사용과 setter 사용이 항상 좀 헷갈리네요. 의견부탁드립니다.
- 해결됨실전! 스프링 데이터 JPA
실무에서는 count() 쿼리 결과를 따로 캐시에 저장하나요?
만약 테이블에 데이터가 수천만개면 페이징할 때 마다 count() 쿼리를 날리는게 부담스러울 것 같은데 이런 경우에는 count() 쿼리를 안날리고 캐시에 담은걸 꺼내 쓰나요?? 아니면 그냥 count() 쿼리를 매번 날리나요?? 궁금합니다!
- 미해결실전! 스프링 데이터 JPA
선생님은 실무에서 데이터를 등록할 때 어떤걸 쓰시나요? ( persist vs save )
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]spring data jpa의 save를 사용할 경우 내부적으로 id 값으로 데이터가 있는지 확인하는 select 쿼리를 날리고 insert 또는 update를 합니다.그럼으로 그냥 insert 하는 것 보다 1번의 쿼리(총 2번)가 더 발생합니다. jpa의 persist를 사용하면 바로 insert를 하여 1번의 쿼리만 발생합니다. 저는 개인적으로 insert만 하는 경우 persist를 사용하고 있습니다. Service에서 직접 EntityManager를 DI 받아 persist를 사용했습니다. 스프링 DB 1편 - 데이터 접근 핵심 원리 을 보다가 Service는 최대한 순수한 자바코드만 있는게 좋다는 말씀에 머리가 띵하더군요. 좋은 OOP 설계를 위해 save를 사용하거나 CustomRepository를 만들어 persist를 사용하거나 어떤게 더 좋은 방법일까요? 선생님은 실무에서 어떻게 사용하시는 지 궁금합니다!
- 해결됨실전! 스프링 데이터 JPA
쿼리 힌트 Page 추가 예제 교재 오타 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 교재에 오타를 발견한 것 같아서 문의드립니다. '쿼리 힌트 Page 추가 예제' 부분에서 코드가 @QueryHints(value = { @QueryHint(name = "org.hibernate.readOnly", value = "true")}, forCounting = true) Page findByUsername(String name, Pagable pageable); 인데 마지막 Pagable -> Pageable로 수정되어야 하는게 맞나요?
- 미해결실전! 스프링 데이터 JPA
data jpa 필드명
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 안녕하세요! jpa repository를 사용할 때 필드명 관련 질문드립니다. Post엔티티의 필드로 Member를 갖고 있다면, postJpaRepository에서 findByMember와 findByMemberId를 사용하는 방법이 있을텐데 둘 중 어느 방법이 더 좋은건가요?? findByMember를 하면 외부 조인없이 바로 post의 필드 중에서 member를 찾아오는 것 같고, findByMemberId를 할 경우, member와 외부 조인이 들어간다고 생각합니다. 하지만 보통 무엇을 찾을 때 id로 찾는다는 생각에 findByMemberId 이 방법을 쓰는 사람도 있을 것 같습니다!
- 해결됨실전! 스프링 데이터 JPA
@Query 를 이용하여 쿼리 정의할 때 limit
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Query 를 이용하여 쿼리 정의할 때 limit 사용이 안되는 걸로 알고있습니다. 그렇다면 개수를 제한하여 가져오고 싶다면 이 방법에서는 반드시 Pageble 를 사용해야 하나요?
- 미해결실전! 스프링 데이터 JPA
Spring Data Jpa를 사용한 테스트 문의
안녕하세요.JpaRepository를 사용해서 테스트를 할 때 방법이 맞는지 궁금해서 문의드립니다. 1. saveMember = memberRepository.save(member)2. findMember = memberRepository.findById(saveMember.getId()) 이렇게 테스트코드를 짜면, 실제로 DB에서 find하는 것이 아니라 영속컨텍스트에서 해당 엔티티를 찾아서 반환하는 것으로알고 있습니다. 만약에 insert 쿼리가 나가는 것과 실제 DB에서 find하기 위해서 아래와 같이 테스트 코드를 짰는데요. 1. saveMember = memberRepository.save(member)추가) memberRepository.flush()추가) em.clear()2. findMember = memberRepository.findById(saveMember.getId()) memberRepository의 flush() 메소드를 통해 DB에 반영하고, 엔티티매니저의 clear()를 통해 영속 컨텍스트를 비웠습니다. 질문)여기서 의문점은 JpaRepository에는 clear() 메소드가 없어서 영속 컨텍스트를 비우기 위해선 엔티티매니저를 테스트 클래스에서 주입받아야 했습니다.JpaRepository를 사용해서 영속 컨텍스트를 비울 수 있는 방법은 없나요???
- 미해결실전! 스프링 데이터 JPA
강의 파일에 대해서
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 다른 강의에서는 강의시 사용하는 pdf와 소스파일이 함께 제공되었는데 이번 강의에서는 따로 소스파일이 없어서 혹시 제공이 안되는 것인지 궁금해서 질문 남깁니다..
- 미해결실전! 스프링 데이터 JPA
jpa 외래키에 대한 질문합니다..
보통의 제약조건을 걸때 아래코드처럼 거는걸로 아는데요.@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "courseSeq")private Course course;반면에, 제약조건을 걸지않고 long 타입의 시퀀스로 만든뒤@Column(columnDefinition = "bigint comment '과정 시퀀스'")private Long courseSeq;이런식으로 유저 시퀀스만으로 queryDsl로 조인걸어서 필요한 데이터만불러오는식이나 생성, 수정, 삭제시 해당엔티티 시퀀스만으로 처리하는식으로 써도되는지...정리하자면 jpa로 @manytoone 어노테이션을 쓰지않고 jpa를 써도 문제될게없는지 궁금해서 질문드립니다.
- 해결됨실전! 스프링 데이터 JPA
@EntityGrape와 page
안녕하세요, 강의 너무 감사하게 보고 있습니다. 다름이 아니고, EntityGraph를 이용하여 연관관계가 존재하는 Entity를 한번에 fetch join으로 가져오는 것으로 이해하였는데 이때 properties에 spring.jpa.properties.hibernate.default_batch_fetch_size=100를 적용하면 한번에 100개씩만 가져오게 되는건가요??추가적으로 이러한 질문을 한 이유는.. 게시글을 구현하고 있습니다. 해당 게시글은 게시글에 댓글을 단 사람들고 1:N관계를 맺고 있고 해당 게시글을 조회한 사람과 1:N관계를 맺고 있고 유저는 여러 게시글을 작성할 수 있기에 유저와 게시글을 N:1관계를 맺고 있습니다. 여기서 게시글을 paging하고 싶은데 해당 게시글의 댓글 수, 조회 수, 작성자 등의 정보를 불러와야하므로 findAll()호출 시 연관관계를 모두 join fetch로 가져와야한다고 생각했습니다. 따라서 JpaRepository에서 @Override @EntityGraph(attributePaths = {"user", "comments", "postHits"} Page<Post> findAll(Pageable pageable); 어노테이션을 이용하여 findAll호출 시 연관된 모든 연관관계를 fetchjoin했으면 해서 저렇게 작성하였고, properties에도 default_batch_fetch_size = 100으로 설정하였습니다. 이후 findAll을 실행하니.. HHH000104: firstResult/maxResults specified with collection fetch; applying in memory! 해당 에러가 발생하는데 이유를 알고싶어 질문남깁니다!!!
- 미해결실전! 스프링 데이터 JPA
접두사
안녕하세요, 강의 잘 보고 있습니다. 강의 내용에서 궁금한점이 있는데 접두사 부분에서 페이징 정보가 둘 이상일 경우 접두사로 구분한다고 나와있는데, 해당 pageable 인자를 Qualifier어노테이션으로 각각 받은 후, 반환할 때는, 서로 다른 두개의 정보를 한번에 반환해야하나요..? 정확한 예시를 알고싶습니다..
- 미해결실전! 스프링 데이터 JPA
Enum 활용기에 대하여
안녕하세요. 현업에서 JPA로 개발하고 있는 주니어 개발자입니다. 사이드 프로젝트를 진행하면서 **DBMS**단에서 Enum을 사용할 지 VARCHAR를 사용할 지 별도의 Table을 사용할 지 고민을 하고 있습니다. 관련하여 향로님께서 써주신 Enum 활용기라는 글을 비롯한 우아한 형제들 기술 블로그에 있는 다른 Enum 내용을 모두 정독하였습니다. 하지만 Java 앱 단에서 Enum을 사용한다는 사실은 찾을 수 있었지만, DB에서 데이터를 저장하는 방식은 찾을 수 없었습니다. 이해한 바로는 해당 게시글에서는 Java(JPA)단에서는 Enum을 사용하고 DBMS에서는 VARCHAR, CHAR로 데이터를 저장하는 것 아닐까 싶은데 잘 이해한건가요? (만약 그렇다면 다른 프로젝트에서 해당 DB 테이블을 사용할 때 어떤 입력 값을 받아야 하는 지 알기 위해 어떻게 해야 할까요..??) > 강의 매우 잘보고 있습니다. 거의 다 2번 이상씩 본 것 같아요..!! 감사합니다. (혹여 무례하지 않다면 질문에 대해 직접 말씀 듣고 싶습니다.) (예시가 빠졌네요!) 가령 Account라는 테이블이 있다면 해당 Account의 상태로 ACTIVE, LOCKED, WITHDRAW, ...)을 저장해야 하는 경우 입니다.
- 미해결실전! 스프링 데이터 JPA
새로운 테스트 생성 후 실행 시 오류
강의 학습하는 도중 반복적인 문제가 발생해서 질문 드립니다. 강의 내용대로 테스트를 작성하고 바로 실행시키면 이처럼 테스트를 찾을 수 없다는 에러가 발생합니다.. 이후 인텔리제이를 완전히 종료한 후 다시 열어 실행시키면 정상적으로 작동하는데, 계속 새로운 테스트를 생성할 때마다 아래의 오류가 발생해서 여쭤봅니다ㅠㅠ 프로젝트 전체 파일 : https://drive.google.com/file/d/15XuYgI2stwEuVcAWCt3AAHrDs4yHpmS_/view?usp=sharing
- 미해결실전! 스프링 데이터 JPA
JPA 엔티티 동일성 보장 문제
강의에서 나온 JPA 동일성 보장이 안되서 질문 올립니다. 강의에서 나온대로 테스트코드는 동일하게 짯는데요. 그냥 멤버 엔티티는 잘되는데 유저 엔티티는 동일성 보장이 안되서 여쭤봅니다. 무슨 다른 문제가 있을가요? 리파지토리는 JPA리파지토리 상속 인터페이스 구현으로 동일합니다. org.opentest4j.AssertionFailedError 위와 같은 에러가 뜹니다.