일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JPQL
- 김영한
- pointcut
- 스프링
- Greedy
- kotlin
- Thymeleaf
- 인프런
- spring
- transaction
- Android
- http
- 백준
- JDBC
- Proxy
- 알고리즘
- springdatajpa
- Spring Boot
- SpringBoot
- 스프링 핵심 원리
- db
- Servlet
- 스프링 핵심 기능
- java
- AOP
- 그리디
- jpa
- QueryDSL
- Exception
- 자바
- Today
- Total
목록인프런/[인프런] 자바ORM 표준 JPA 프로그래밍 (49)
개발자되기 프로젝트
1. 지연로딩 LAZY FETCH를 사용해서 프록시로 조회. @Entity public class Member extends BaseEntity{ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; Member member = new Member(); member.setUserName("hello"); em.persist(member); em.flush(); em.clear(); Member m = em.find(Member.class, member.getId()); tx.commit(); 로그를 보면 SELECT 쿼리를 통해 member만 읽어온다. Hibernate: select member0_.MEMB..
1. Member를 조회할 때 Team도 함께 조회해아 하나..?? 2. 프록시 기초 JPA는 em.find()외에도 em.getReference()를 제공 em.find() vs em.getReference() en.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회. DB에 쿼리가 안나가는데 객체가 조회가 됨! Proxy는 진짜 객체와 껍데이는 똑같은데, 안이 텅 비었음. 내부에 target이 있는데 진짜 레퍼런스를 가르킴. em.getReference() 하는 시점에 select SQL 안나감. Member findMember = em.getReference(Member.class, member.g..
1. 요구사항 추가 상품의 종류는 음반, 도서, 영화가 있고 이후 더 확장이 될 수 있어 모든 데이터는 등록일과 수정일이 필수! 2. 도메인 모델 3. 도메인 모델 상세 4. 테이블 설계 5. Item class @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn public abstract class Item { @Id @GeneratedValue() //default = auto. @Column(name = "ITEM_ID") private Long id; Hibernate..
1. @MappedSuperclass 공통 매핑 정보가 필요할 때 사용(id, name) 예를 들어 객체 마다 모두 id 와 name이 있는데 매번 만들기 너무 귀찮음.. 객체는 상속받아서 사용하면됨 상속 관계 매핑이 아니라 단순이 super class의 속성만 사용함. BaseEntity class - @MappedSuperclass @MappedSuperclass public abstract class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String modifiedBy; private String lastModifiedBy; private LocalDateTime lastModifiedDat..
1. 상속관계 매핑 객체는 상속관계가 있으나, 관계형 데이터베이스는 상속관계가 없음 슈퍼타입 서브타입 관계라는 모델링 기법이 그나마 객체 상속과 유사 상속관계 매핑 : 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑. 슈퍼타입 : 공통 부분만 가지고 있음 서브타입 : 개별적으로 가지는 속성들. 2. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 -> 조인 전략 PK, FK로 조인함 ITEM TABLE만 보면 구분이 안되는데..어떻게 구분..?->DTYPE 통합 테이블로 변환 -> 단일 테이블 전략 논리 모델을 한 테이블로 합쳐버림. 한 테이블에 있으면 어떻게 구분..? DTYPE 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 테이블을 각각 구현. 3..
1. 엔티티 주문과 배송은 1:1 상품과 카테고리는 N:M 2. ERD ORDERS와 DELIVERY 관계에서 FK는 ORDRES에서 관리. ORDER가 주 TABLE 다대다는 일대다, 다대일 관계로 풀어야함. 중간 테이블 필요. 3. 엔티티 상세 4. 코드 Delivery @Entity public class Delivery { @Id @GeneratedValue private Long id; @OneToOne(mappedBy = "delivery") private Order order; private String city; private String street; private String zipcode; private DeliveryStatus status; } Category - 다대다 매핑은 사..
1. 다대다 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계 표현이 안됨!!!!! 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어내야함. 그런데??? 객체는 컬렉션을 사용해서 객체 2개로 다대다 가능 ㅋㅋㅋㅋ 2. 다대다 특징 @ManyToMany사용 @JoinTable로 연결 테이블 지정 단방향 , 양방향 가능 Member -> Product @ManyToMany @JoinTable(name = "MEMBER_PRODUCT") private List products = new ArrayList(); Product -> Member @ManyToMany(mappedBy = "products") private List members = new ArrayList(); 3. 다대다 한계 편리해 ..
1. 일대일 관계 일대일 관계는 당연히 반대도 일대일 주 테이블이나 대상 테이블 중에 외래 키 선택 가능 주 테이블에 외래 키 대상 테이블에 외래 키 외래 키 데이터베이스 유니크(UNI) 제약조건 추가된 것이 일대일 관계 2. 주 테이블에 외래 키 단방향 다대일 단방향 매핑과 유사 Member -> Locker @OneToOne @JoinColumn(name = "LOCKIER_ID") private Locker locker; 3. 주 테이블에 외래키 양방향 Member가 주인! Member -> Locker @OneToOne @JoinColumn(name = "LOCKIER_ID") private Locker locker; Locker -> Member @OneToOne(mappedBy = "loc..