월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 스프링 데이터 JPA
외래키에 해당하는 컬럼으로 조회하고 싶을때는 어떻게 하면 될까요???
특정 팀 소속인 사용자 목록을 얻고 싶다면 Member Repository에서 아래와 같이 만들어서 findByTeam(Team team, Pageable pageable); Team 객체에 해당하는 Team의 id 값을 담아서 조회 하고 있는데 이러한 방식 맞나요??
- 미해결실전! 스프링 데이터 JPA
MultipleBagFetchException 관련
안녕하세요. 아래와 같이 하나의 클래스에서 XToMany 연관관계를 2개 이상 사용을 하면 MultipleBagFetchException 을 발생시키는데요. 이것을 좀 찾아보니 LIST -> SET으로 변경하면 간단히 해결이 되나 성능상 문제가 있는것으로 보이는데 실무에서는 이를 어떻게 해결하시는지 궁금합니다.
- 해결됨실전! 스프링 데이터 JPA
@Transactional관련 질문 입니다.
package study.querydsl.repository;import org.junit.jupiter.api.AfterEach;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.annotation.Rollback;import org.springframework.transaction.annotation.Transactional;import study.querydsl.entity.Member;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import java.util.ArrayList;import java.util.List;@SpringBootTest@Transactional@Rollback(false)class MemberRepositoryTest { @PersistenceContext private EntityManager em; @Autowired private MemberRepository memberRepository; @Test public void test() throws InterruptedException { List<Member> members = makeList(); for (Member member : members) { test1(member.getId()); Thread.sleep(1000); } } private List<Member> makeList() throws InterruptedException { List<Member> members = new ArrayList<>(); for (int i = 0 ; i < 20 ; i++) { Member member = new Member("gon " + i, i); members.add(member); } memberRepository.saveAll(members); em.flush(); //<--- insert query는 생성되나 db 에는 아직 없음. Thread.sleep(5000); return members; } protected void test1(Long id) { Member member = memberRepository.findById(id).get(); member.setUsername("Park"); memberRepository.save(member); em.flush(); //<--- update query는 생성되나 db 에는 아직 없음. }} 안녕하세요 위와 같은 예제에서 makeList 메소드에서 생성된 리스트를 실 db에 insert를 하고 각 리스트 아이템을 처리하는 test1 메소드에서 처리된 아이템을 insert 를 하고 싶은데 em.flush를 해도 insert, update 쿼리만 발생되고 db에는 아직 결과가 들어오지 않고 test가 완전히 종료가 되는 순간 db에 값이 들어온것으로 확인 됩니다. 이를 해결하기 위해서 class에 @transactional 을 제거하고 test1 메소드에 @Transactional을 붙이니 의도한대로 makelist에서 리스트 결과가 한번 db에 저장되고 test1 메소드에서 처리된 결과도 순차적으로 db에 인서트 되는것으로 확인 했으나 연관관계가 존재하는 경우 fetch lazy 동작이 no session으로 안되던데 이를 해결하는 방법이 있는지요. 질문을 정리하면 1. Transactional 중간에 db에 값을 쓰는 방법이 있는지. 2. class에서 @Transactional을 제거 하고 test1에 @Transactional을 붙이면 연관관계 fetch lazy가 동작을 하지 않는 이유가 무엇인지 (제가 이해를 했을땐 test1 부터 영속성 컨텍스트가 관리되어 이후 메소드 호출부터는 transaction이 걸려서 fetch lazy가 동작될거라고 예상했습니다. ) 친절하고 자세한 답변 늘 감사드립니다.
- 실전! 스프링 데이터 JPA
상속받는 엔티티 질문(outer join)
삭제된 글입니다
- 미해결실전! 스프링 데이터 JPA
save the transient instance before flushing 에러
안녕하세요. MemberRepositoryTest 시에 List<Member> all = memberRepository.findAll(); 에서 save the transient instance before flushing 에러가 발생을 하는데요. 인터넷에서 찾아보니 casecade 옵션을 넣어야 한다고 하는데 강의하신 소스와 자료와는 차이가 없는데요. Member 엔티티의 Team 엔티티와의 @ManyToOne 에 casecade 를 적용하니 오류는 해결이 되었습니다. 혹시 이유를 알 수 있을까요?
- 미해결실전! 스프링 데이터 JPA
객체 생성에 대한 방법
안녕하세요? 첫강의부터 쭉 잘 듣고 있습니다. JPA에 대한 질문이라기 보다는 객체지향 기법과 관련된 질문입니다. 엔티티 클래스에 최대한 setter지양하고 필드의 변경 포인트를 해당 엔티티로 모으는 것을 강조하셨고, 객체 생성 시점에 생성자로 필요한 필드들을 다 받아서 생성(저는 of가 더 좋네요)하는 게 좋다고도 말씀하셨지요. 근데 실무 개발하다보면 엔티티에 필드들이 최소 10개 이상은 되고 초반에 세팅되어야 할 값들이 많아지더라구요. 이 상황에서 파라미터가 10개 이상되는 argument constructor나 of를 이용해서 객체를 생성하는게... 맞는가? 예쁜가? 더 좋은 방법은 없는가? 생각이 들더라고요. 클린코드 같은 책보면 파라미터 개수는 3갠가 4개 이하로 유지하는게 좋다고도 하고 가독성도 떨어져 보입니다. 그래서 그냥 default constructor를 public으로 열어두고, setter도 열어둬서 객체 생성을 setAaa, setBbb, setCcc 등으로 해서 하나씩 하게 됩니다. 물론 세팅해줘야할 필드의 누락의 문제나 변경 포인트 관리 어려움 등의 문제가 생기겠지만요. 요약하자면, 생성 시점에 많은 필드들을 이용해 객체를 생성해야 할 때 어떻게 하시는지, 어떻게 하는게 좋을 지 의견 부탁드립니다. 감사합니다.
- 해결됨실전! 스프링 데이터 JPA
intellij 질문 드립니다.
최신 프로젝트로 만들어서 사용하고 있는데 @Entity를 붙이면 command + N 으로 constructer를 만들면 defalut 생성자만 생성되는데 혹시 설정이 바뀌었을까요?
- 미해결실전! 스프링 데이터 JPA
enum을 list로 어떻게 받는지 궁금합니다.
import lombok.Getter;import lombok.RequiredArgsConstructor;@Getter@RequiredArgsConstructorpublic enum RoleType { USER("user","일반 유저"), ADMIN("admin","관리자"); private final String roleCode; private final String roleName;}이렇게 롤 타입이 있고, 이것을 유저에 매핑하면 @Enumerated(value = EnumType.STRING)@Column(nullable = false)private RoleType roleType;보통 이런식으로 사용이 되는데전 RoleType을 복수로 List<RoleType>로 갖게 하고 싶은데 이럴 땐 어떻게 하는지 궁금합니다.p/s 다음 강의는 언제쯤 나올까여? ㅎㅎ querydsl기대중입니다!
- 해결됨실전! 스프링 데이터 JPA
Service class의 transactional 메소드 문의
안녕하세요 강의 잘 수강중입니다. 한가지 질문이 있습니니다. Service class에 @Transactional 어노테이션을 붙인 메소드내에서 spring data jpa의 공통인터페이스를 통해 객체를 가져왔을때 이것은 영속성 컨텍스트에서 관리가 안되는건가요 ? 해당 객체의 값을 변경하였을때 save를 하지않으면 dirty checking으로 인한 변경된 객체가 저장이 되지 않아 문의 드립니다. 감사합니다.
- 미해결실전! 스프링 데이터 JPA
페이징 파라미터 질문 드립니다
페이징 파라미터를 넘길 때 악의적으로 Page=10000&size=1000000으로 보낼 수도 있을거 같은데 이럴경우 어떤식으로 처리하는지 알고 싶습니다~
- 미해결실전! 스프링 데이터 JPA
여러테이블을 페치조인할 경우
여러테이블을 페치조인한 정적쿼리인 경우는 @Query를 이용해서 리포지토리에서 직접 작성하고 동적쿼리만 QueryDSL사용을 권장하는 건가요?
- 해결됨실전! 스프링 데이터 JPA
스프링 데이터 JPA 페이징과 정렬 강의 중 LEFT OUTER JOIN 관련
안녕하세요~ 영한님 강의는 빠짐 없이 수강하고 있습니다~^^ 강의 중 Total Count가 LEFT OUTER JOIN에 의해 뻥튀기되지 않는다는 언급이 있어서요~ 조인되는 테이블에 조인될 데이터가 2개 이상인 경우 INNER JOIN과 마찬가지로 2개 Row가 될거라서 LEFT OUTER JOIN인 경우에도 Total Count에 영향을 준다~가 맞을 것 같아서요. ToOne 관계에서만 해당된다~라는 첨언이 있는 것도 괜찮을 것 같습니다. 혹시 도움이 되셨다면 영한님 친필 사인 북 선물 주시나요? ㅎㅎ 항상 좋은 강의 부탁 드리고, 건강하세요~
- 미해결실전! 스프링 데이터 JPA
@EntityGraph 사용시 조인 타입을 정할 수 있나요?
안녕하세요! @EntityGraph 는 기본적으로 left join을 하는 것 같은데 혹시 inner 나 right 조인도 @EntityGraph 에서 가능한지 궁금합니다. 아니면 이때는 jpql을 작성해야 할까요? 그리고 늦은 시간에 질문이라 죄송하고 😭 늘 좋은 강의 정말 감사드립니다! 😄
- 해결됨실전! 스프링 데이터 JPA
@PersistenceContext
초보적인 질문일지 모르겠지만 EntityManager를 @Autowired로 받아와도 결과가 같던데 @PersistenceContext로 받아오시는 이유가 혹시 있으신가요?
- 미해결실전! 스프링 데이터 JPA
안녕하세요 영한님
안녕하세요 김영한님 모든 강좌를 보고나서 이제 query dsl 강좌를 기다리고 있습니다. 개발 관련하여 이것이 가능한지 궁금하여 질문 드립니다. 휴대폰에서 전송 받은 경도 위도 좌표로 여러 매장들을 거리 순으로 정렬하여 API로 보내주려고 하는데, 해당 부분을 강좌에서 말씀하신 것처럼 native query 혹은 jdbc template 을 이용해서 구현하려고 합니다. 혹시 이것을 JPQL을 이용해서 개발을 할 수 있을까요?
- 미해결실전! 스프링 데이터 JPA
MemberRepository Interface 를 테스트할때 @Transactional 어노테이션을 빼서 테스트해도 오류가 나지 않는데..
MemberJpaRepository class 테스트 할때 테스트 클래스에 @Transactional 을 달지 않아서 오류가 발생했는데 MemberRepository Interface 를 테스트할때는 @Transactional 어노테이션을 빼서 테스트 해도 오류가 나지 않는데 이건 JPA 가 만들어주는 MemberRepository 구현체가 트랜잭션 안에서 쿼리가 실행되도록 보장하기 때문 일까요????
- 미해결실전! 스프링 데이터 JPA
리파짓토리 생성 질문 드립니다.
A라는 엔터티와 B라는 엔터티가 있고, 이것의 관계가 1:N이라는 관계에 있다고 가정했을 때 repository를 생성할 때 , ARepository만 만들거나, BRepository를 만들거나, ARepositry 와 BRepository를 만드는 경우가 있을 거 같은대요. 혹시 각각의 경우에 대해서 알려주실 수 있을까요? 전 무의적으로 각각의 Entity에대해서 Repository를 만드는 것 같아서요 ㅎㅎ;
- 해결됨실전! 스프링 데이터 JPA
Serializable 질문 드립니다
강의를 역시나 재미나게 보고 있습니다 ㅎㅎ 가끔 블로그를 보면 entity에 Serializable을 붙이는 경우가 있는데 이것에 대한 설명 부탁드립니다. 제가 아는 한에서 Serializable은 객체를 다른 서버로(ip가 다른) 보낼 때 객체로는 보낼 수 없어서 스트림으로 만들기 위해 Serializable을 사용하는 것으로 이해하고 있는데. 보통 dto로 매핍을 받으니 entity 객체가 다른 곳으로 이동할 일이 옶다고 보거든요. 오히려 서로 다른 ip로 되어 있는 서버에 보내기 위해서는 dto객체를 serializable로 만드는게 맞지않을까 생각합니다