일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- HTTP API
- MVC
- 성능 최적화
- 정적 리소스
- querydsl
- 지연로딩
- 엔티티 매핑
- 주문조회
- 뷰 템플릿
- 서블릿
- NAMED 쿼리
- 벌크 연산
- 스프링 데이터 JPA
- 연관관계 매핑
- 스프링
- DTO 조회
- JPA
- DB
- dto
- rest api
- batchsize
- 한방 쿼리
- SpringEL
- API
- 페치 조인
- 서버인증
- hibernate5Module
- 컬렉션 조회
- 엔티티 변환
- JPQL
- Today
- Total
목록JPA (23)
UmaiCo - 우마이코
컬렉션 조회 - DTO로 변환 이전 V1의 엔티티 노출 문제를 해결하기 위해 DTO로 변환하여 반환해야 한다. 이전과 같은 방식으로 변환하되 DTO 내부에 엔티티를 두어서는 안된다. 1. 코드 @GetMapping("/api/v2/orders") public List ordersV2(){ List orders = orderRepository.findAllByString(new OrderSearch()); List result = orders.stream() .map(o -> new OrderDto(o)) .collect(toList()); return result; } //OrderDto @Data static class OrderDto { private Long orderId; private Strin..
주문조회 V4 - JPA에서 DTO로 바로 조회 V4: JPA에서 DTO로 바로 조회하여 Select절에서 원하는 데이터만 선택하여 조회하는 방법을 알아보겠다. @GetMapping("/api/v4/simple-orders") public List ordersV4() { return orderSimpleQueryRepository.findOrderDtos(); } Controller에 다음 코드를 추가한다. 이전 V3와 다른점이 보일 것이다. 바로 기존 DTO가 아니라 새로운 DTO로 반환한다. 또한, 참조하는 레포지토리도 변경되었다. 또, 엔티티를 DTO로 변환하는 작업도 없어진 것을 볼 수 있다. 지금부터 하나하나 설명 하겠다. 우선 새로 만든 레포지토리 이다. @Repository @Required..
주문조회 - 엔티티 직접 노출 @GetMapping("/api/v1/simple-orders") public List orderV1(){ List orders = orderRepository .findAllByString(new OrderSearch()); return orders; } 다음과 같이 엔티티를 직접 반환 하였다. 위의 코드를 그냥 호출하면 오류가 발생한다. 그 이유는 무한 루프에 빠지기 때문이다.. 여기서 왜 무한 루프에 빠지게 될까? 바로 order가 Member, Delivery, Order_Item과 양방향 연관관계를 맺고 있기 때문이다. Order에서 Member, Delivery, Order_Item를 조회하는데 3개의 객체에서도 Order를 참조하고 있기 때문에 무한 루프가 발생..
프록시와 연관관계 관리 목차 프록시 즉시 로딩과 지연로딩 지연 로딩 활용 영속성 전이: CASCADE 고아 객체 영속성 전이 + 고아 객체, 생명주기 1. 프록시 Member와 Team 객체가 있다. Member와 Team 은 다대일 양방향 관계이다. em.find(Member.Class(), member.getId()); 을 실행하면 Member객체와 Team 객체를 한번에 가져온다. Member와 Team을 거의 같이 사용한다면 문제가 되지 않지만, Member객체만 필요한 상황에서 Team 객체까지 Join하여 가져오는 것은 낭비 프록시 기초 em.find() VS em.getReference() em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference(): 데이..
고급 매핑 1. 상속관계 매핑 관계형 DB에서는 상속 관계x 슈퍼타입 서브 타입 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑: 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 모델을 실제 물리 모델로 구현하는 법 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name=“DTYPE”) @DiscriminatorValue(“XXX..
다양한 연관관계 매핑 1. 연관관계 매핑시 고려사항 3가지 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 단방향, 양방향 연관관계의 주인(양방향일때) 2. 다대일 다대일 단방향 가장 많이 사용하는 연관관계 다대일의 반대는 일대다 다대일 양방향 외래키가 있는 쪽이 연관관계의 주인 양쪽을 서로 참조하도록 개발 3. 일대다 일대다 단방향 일대다 단방향은 일이 연관관계의 주인 테이블에서 일대다 관계는 항상 다 쪽에 외래키가 있음 객체와 테이블의 차이로 반대편 테이블의 외래키를 관리하는 특이한 구조 @JoinColumn을 꼭 사용해야 함. 그렇지 않으면 조인 테이블 방식을 사용함(중간에 테이블을 하나 추가함) 단점 엔티티가 관리하는 외래키..
JPA @JoinColumn @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name="member_id") private Long id; @OneToMany(mappedBy = "member") private List orders = new ArrayList(); } @Entity @Table(name="orders") @Getter @Setter public class Order { @Id @GeneratedValue @Column(name="order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="member_id") privat..
Entity, DTO, DAO, VO 1. Entity DB 테이블과 매핑되는 클래스 2. DAO(Data Access Object) DB를 사용해 데이터를 조회하거나 조작하는 기능을 하는 오브젝트 서비스와 DB사이에서 데이터를 옮기는 역할 -> 즉, 쿼리를 날려 데이터를 가져오거나 저장 DB에 로그인, 입력, 받아오기, 수정, 삭제 등의 작업들을 정의한 클래스 JPA Repository객체들이 일반적으로 DAO 역할을 함 3. DTO(Data Transfer Object) 계층간 데이터 교환을 위한 객체 DB에서 얻은 데이터를 Controller나 Service 로직에서 사용하기 위한 객체 로직 없이 데이터와 getter, setter만 존재 Request, response용 DTO: View를 위한 ..
h2DB를 띄워놓고 코드를 실행하는 와중에 에러)SQL Error 23505가 발생하는 문제가 생겼다. 찾아보니 h2버전과 하이버네이트(JPA) 버전 호환 관련해서 생긴 문제인것 같다. h2 1.4.200버전을 사용하면 하이버네이트 버전을 5.4.13.Final로 변경해주어야 한다. 해당 오류가 발생한 분들은 pom.xml파일에서 하이버네이트 버전을 변경해야 한다. 하이버네이트의 버전을 번경하기 싫다면 h2 버전을 1.4.199로 낮춰도 정상작동 한다.
연관관계 매핑 기초 1. 목표 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 2. 연관관계가 필요한 이유 객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다. -조영호(객체지향의 사실과 오해)- 예를 들어 member와 team이 있다고 가정 하나의 member는 하나의 team에 소속될 수 있고 하나의 team에는 여러 member가 소속될 수 있다.(다대일 관계) 객체를 테이블에 맞추는 모델링 참조 대신 외래 키 식별자를 직접 다룸 참조객체를 찾기 위해서는 member객체를 찾고 team의 식별자로 다시 조회 해야 한다.(즉 select문이 2번 발생) 객체를 테이블에 맞추어 모델링하면 협력관계를 만들수 없음. 테이블은 외래 키로 조인을 사용하여 연관된..