JPA

JPA/jpa-basic

9. 값 타입

핵심 임베디드 타입(복합 값 타입) 값 타입 컬렉션 1. JPA 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 PK(식별자)로 지속해서 추적 가능 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 2. 값 타입의 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type, 복합 값 타입) 컬렉션 값 타입(collection value type) 3. 기본값 타입 생명주기를 엔..

JPA/jpa-basic

8. 프록시와 연관관계 관리

1. 프록시 1.1. 프록시 기초 em.find() vs em.getReference() em.find() : db를 통해서 실제 엔티티 객체 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 1.2. 프록시 특징1 실제 class를 상속 받아서 만들어진다. 실제 클래스와 겉 모양이 같다. 실제 객체의 참조(target)을 보관 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메서드를 호출 1.3. 프록시 객체의 초기화 MemberChap8 member = new MemberChap8(); member.setUsername("hello"); em.persist(member); em.flush(); em.clear(); Member findMember =..

JPA/jpa-basic

7. 고급 매핑

상속관계 매핑 @MappedSuperclass package hellojpa.chap7; @MappedSuperclass public abstract class BaseEntity { @Column(name = "INSERT_MEMBER") private String createBy; private LocalDateTime createDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; } package hellojpa.chap7; import javax.persistence.*; @Entity @Inheritance(strategy = InheritanceType.JOINED) //@Inheritance(strategy..

JPA/jpa-basic

6. 다양한 연관관계 매핑

1. 연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 1.1. 다중성 다대일 : @ManyToOne (권장) 일대다 : @OneToMany (억지) 일대일 : @OneToONe 다대다 : @ManyToMany (사용 금지) 1.2. 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 1.3. 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래 키를 관리할 곳을 지정해야함 연관관계의 주인: 외래 키를 관리하는 참조 주인의..

JPA/jpa-basic

5. 연관관계 매핑 기초

핵심 방향 : 단방향, 양방향 다중성 : 다대일, 일대다, 일대일, 다대다 연관관계의 주인 : 객체 양방향 연관관계는 관리 주인이 필요 1. 연관관계가 필요한 이유 시나리오 회원과 팀 회원은 하나의 팀에만 소속 회원 : 팀 = n : 1 1.1. 연관관계 없는 경우 모델링 Member 엔티티 package hellojpa.chap5; import javax.persistence.*; @Entity @SequenceGenerator( name = "MEMBER_SEQ_GENERATOR", sequenceName = "MEMBER_SEQ", // initialValue = 1, allocationSize = 1) // 1부터 시작하고 seq가 1씩 증가 initialValue = 1, allocationSi..

JPA/jpa-basic

4. 엔티티 매핑

1. 엔티티 매핑 객체와 관계형 데이터베이스 매핑하기 : 실제 설계적인 측면 (정적 측면), 객체와 db를 어떻게 연결하는지 영속성 컨텍스트(entity Manager의 1차 cache라고 봐도 무방 - spring에선 약간 다르다.) : JPA 내부 동작 방식 및 메커니즘 1.1. 엔티티 매핑 개요 객체외 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn 1.2. 데이터베이스 스키마 자동 생성 1.2.1 자동 생성 DDL을 애플리케이션 실행 시점에 자동 생성 - local에서 개발할 때 도움 테이블 중심 설계 -> 객체 중심 설계 가능해짐 데이터베이스 방언을 활용해서 데이터베이스에 맞는 ..

JPA/jpa-basic

3.영속성 관리

1. 영속성 컨텍스트 1.1. jpa에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 : 실제 설계적인 측면 (정적 측면), 객체와 db를 어떻게 연결하는지 영속성 컨텍스트(entity Manager의 1차 cache라고 봐도 무방 - spring에선 약간 다르다.) : JPA 내부 동작 방식 및 메커니즘 1.2. 엔티티 매니저 팩토리와 엔티티 매니저 1.3. 영속성 컨텍스트 엔티티를 영구 저장하는 환경 영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않는다. 엔티티 매니저를 통해서 영속석 컨텍스트에 접근 가능하다. 영속성 context 내부에 1차 캐시, 1차 캐시 내부에 스냅샷, 쓰기 지연 SQL 저장소 존재 EntityManager.persist(entity); //db에 저장하는 것이 ..

JPA/jpa-basic

2. JPA 시작하기

1. Hello JPA - 프로젝트 생성 H2 database MySQL, Oracle 데이터베이스 시뮬레이션 기능 sequence, auto increment 기능 지원 maven build system 자바 라이브러리, 빌드 관리 라이브러리 자동 다운로드 및 의존성 관리 gradle한테 밀리는 중 java 8 사용 2. java-jpa 프로젝트 생성 2.1. project template 생성 spring/boot 없이 java-jpa 프로젝트 생성하는 방법 New Project -> (좌측 배너 건들이지 않기) name, Language, Build system, JDK, GroupId, ArtifacId 작성 후 create 2.2. pom.xml - 라이브러리 추가 default 제공 4.0.0..

wooweee
'JPA' 카테고리의 글 목록