JPA정리25 [JPA] 지연 로딩과 조회 성능 최적화 - 1 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 간단한 주문 조회 V1: 엔티티를 직접 노출 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 다음과 같은 controller가 있다고 해보자. (잘못 만든 컨트롤러이다. 오류 상황을 보이기 위한 목적이다) @RestController @RequiredArgsConstructor public class OrderSimpleApiController { private final OrderRepository orderRepository; @GetMapping("/api/v1/simple-orders") public List ordersV1() { List.. BackEnd/JPA 2022. 4. 19. [JPA] 변경감지와 병합(merge) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 14. 변경감지와 병합 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 준영속 엔티티에 대하여 알아보자. 준영속 엔티티는 영속성 컨텍스트가 더이상 관리하지 않는 엔티티를 의미한다. 다음 코드를 살펴보자. @PostMapping("/items/{itemId}/edit") public String updateItem(@ModelAttribute("form") BookForm form, @PathVariable String itemId){ Book book = new Book(); book.setId(form.getId()); book.setName(.. BackEnd/JPA 2022. 4. 11. [JPA] 객체지향 쿼리 언어 4 (중급 문법) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 4. 다형성 쿼리 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● TYPE - 조회 대상을 특정 자식으로 한정한다. 예를 들면, Item 중 Book, Movie를 조회해라 와 같은 JPQL은 다음과 같다. //JPQL select i from Item i where type(i) IN(Book, Movie) //SQL select i from Item i where i.DTYPE in('B', 'M'); ● TREAT (JPA2.1) - 자바에서의 다운캐스팅과 유사하다. - 상속 구조에서 부모타입을 특정 자식 타입으로 다루기 위해 사용한다. - FRO.. BackEnd/JPA 2022. 4. 10. [JPA] 객체지향 쿼리 언어 3 (중급 문법) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 경로 표현식 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 경로 표현식 이란? => .(점) 을 찍어 객체 그래프를 탐색하는 방법을 말한다. select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name ='팀A' ● 경로 표현식 용어 정리 1. 상태 필드 : 단순히 값을 저장하기 위한 필드 (ex. m.username) 2. 연관 필드 : 연관관계를 위한 필드 - 단일 값 연관 필드 : @ManyToOne, @.. BackEnd/JPA 2022. 4. 10. [JPA] 객체지향 쿼리 언어 2 (기본 문법) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 5. 조인 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● 내부 조인 SELECT m FROM Member m [INNER] JOIN m.team t ● 외부 조인 SELECT m FROM Member m LEFT [OUTER] JOIN m.team t ● 세타 조인 select count(m) from Member m, Team t where m.username = t.name (설명에서 세타 조인의 의미가 내가 알던것과 달라 질문글을 찾아봤는데, 다음과 같이 설명해 주셨다. => 세타조인은 동등조인이면서 동시에 sql에서 join구문 없이 사용하는 .. BackEnd/JPA 2022. 4. 9. [JPA] 값 타입 - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 4. 값 타입의 비교 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 인스턴스가 달라도 그 안에 값이 같으면 같은것으로 봐야한다. // primitive type 비교 int a = 10; int b = 10; System.out.println(a == b); // true // 임베디드 타입 비교 Address a = new Address("서울", "test", 7777); Address b = new Address("서울", "test", 7777); System.out.println(a == b); // false 임베디드 타입을 '==' 연산자로 .. BackEnd/JPA 2022. 4. 7. [JPA] 영속성 전이와 고아 객체 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 영속성 전이 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만들고 싶다면? 예를 들어 부모 엔티티를 저장하면 자식 엔티티도 함께 저장되도록 말이다! 우선 영속성 전이가 안되는 기본적인 엔티티의 저장방법부터 알아보자. - parent, child // parent @Entity public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") priva.. BackEnd/JPA 2022. 4. 6. [JPA] 프록시와 연관관계 관리 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 프록시 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 한가지 의문을 가져보자. Team이라는 필드를 갖고있는 Member를 조회할때 Team도 한번에 함께 조회되어야 할까? 예를 들어 다음과 같은 코드가 있다고 해보자. Member member = entityManager.find(Member.class, 1L); System.out.println("username = " + member.getUsername()); Team team = member.getTeam(); System.out.println("Team = " + team.getName().. BackEnd/JPA 2022. 4. 6. [JPA] 고급 매핑 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 상속관계 매핑 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 관계형 데이터베이스 같은 경우 상속 관계가 없다. 대신 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사한 방식이다. 상속관계 매핑 : 객체의 상속 구조를 DB에서의 슈퍼타입, 서브타임 관계 매핑으로 해결한다. 위 그림에서 왼쪽과 같은 논리 모델을, 오른쪽과 같은 실제 물리 모델로 구현하는 방법에는 3가지가 있다. 1) 조인 전략 (각각 테이블로 변환) 2) 단일 테이블 전략 (통합 테이블로 변환) 3) 구현 클래스마다 테이블 전략 (서브타입 테이블로 변환) 다음과 같이 @Inh.. BackEnd/JPA 2022. 4. 5. [JPA] 다양한 연관관계 매핑 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 0. 연관관계 매핑시 고려할점 3가지 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany => 다대다는 실무에서 사용하면 안된다. ● 단방향, 양방향 - 테이블 외래키 하나로 양쪽 Join 가능하다. 사실상 방향이라는 개념이 없다. - 객체 참조용 필드가 있는 쪽에서 참조 대상으로만 참조가 가능하다. 한 쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향 이다. ● 연관관계의 주인 테이블은 외래 키(FK) 하나로 두 테이블의 연관관계를 .. BackEnd/JPA 2022. 4. 4. [JPA] 연관관계 매핑 기초 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 단방향 연관관계 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우리는 객체와 테이블 연관관계의 차이를 이해해야 합니다. 객체지향의 페러다임과 RDB의 페러다임 간의 간극에서 오는 차이가 있으며 이를 인지하고 공부해야 합니다. 1. 연관관계의 필요성 객체지향 설계의 목표는 자율적인 객체들의 협력 공통체를 만드는 것이다. (조영호) 2. 객체를 테이블에 맞춰 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. ● 객체를 테이블에 맞춰 모델링 하기 (연관관계가 없는 객체) 우선 모델링할 다이어 그램을 살펴보자. MEMBER 테이블에서 TEAM의 PK.. BackEnd/JPA 2022. 4. 3. [JPA] 엔티티 매핑 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 객체와 테이블 매핑 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● @Entity 1. @Entity가 붙은 클래스를 엔티티 라고 하며, JPA가 관리한다. 2. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다. 3. 주의사항 - 기본 생성자 필수(파라미터가 없는 public or protected) - final 클래스, enum, interface inner 클래스 사용 x - 저장할 필드에 final 사용 X 4. 속성 정리 - name 속성 JPA에서 사용할 엔티티의 이름을 지정할수가 있다. 만약 name 속성을 지정하지.. BackEnd/JPA 2022. 4. 2. 이전 1 2 3 다음