Programming/Database & Query9 [JPA] 자바 ORM 표준 JPA 프로그래밍 : 값 타입 목차 기본값 타입 임베디드 (복합 값 타입) 값 타입과 불변 객체 값 타입의 비교 값 타입 컬렉션 실전 예제 - 6. 값 타입 매핑 기본값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 자바 기본(primitive) 타입 (int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type,.. 2022. 3. 4. [JPA] 자바 ORM 표준 JPA 프로그래밍 : 프록시와 연관관계 관리 목차 프록시 즉시 로딩과 지연 로딩 지연 로딩 활용 영속성 전이 : CASCADE 고아 객체 영속성 전이 + 고아 객체, 생명주기 실전 예제 프록시 프록시 기초 em.find() vs em.**getRerence()** em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 Member member = new Member(); member.setUsername("hello"); em.persist(member); em.flush(); em.clear(); // select query 나가지 않음! 프록시객체 반환됨. Id는 이미 알고 있는 값 Member findMember = em.getRefere.. 2022. 2. 22. [JPA] 자바 ORM 표준 JPA 프로그래밍 : 고급매핑 목차 상속관계 매핑 @MappedSuperclass 실전 예제 - 4. 상속관계 매핑 상속관계 매핑 관계형 데이터베이스는 상속 관계가 없음 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 (JPA에서 세 방법 지원) 각각 테이블로 변환 → 조인 전략 통합 테이블로 변환 → 단일 테이블 전략 (JPA 기본 전략) 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS.. 2022. 2. 17. [JPA] 자바 ORM 표준 JPA 프로그래밍 : 다양한 연관관계 매핑 연관관계 매핑시 고려사항 3가지 다중성 다대일 : @ManyToOne (가장 많이 사용) 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany (실무에서 사용하지 않음) 단방향, 양방향 테이블 외래키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 ( 사실 단방향 참조가 2개 있는 구조!) 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A → B, B → A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음. 둘 중 테이블의 외래키를 관리할 곳을 지정해야 함 연관관계의 주인 : 외래키를 관리하는 참조 주인의 반대편 : .. 2022. 2. 10. [JPA] 자바 ORM 표준 JPA 프로그래밍 : 연관관계 매핑 기초 목표 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 용어 이해 방향(Direction) : 단방향, 양방향 다중성(Multiplicity) : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인(Owner) : 객체 양방향 연관관계는 관리 주인이 필요 객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다. - 조영호 (객체지향의 사실과 오해) 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. 객체는 참조를 사용해서 연관된 객체를 찾는다. 테이블과 객체 사이에는 이런 큰 간격이 있다. 회원 저장시: 팀 저장 → 저장된 팀 ID 조회.. 2022. 1. 31. [JPA] GenerationType.Sequence 설정시 next value 두 번 호출하는 이유 JPA Entity 객체의 Id 필드를 지정할 때, Generation type을 identity, sequence, table 등의 전략으로 설정할 수 있다. (관련 포스팅) 이 때 type을 sequence로 설정하고 persistence.xml 내 DDL auto 프로퍼티를 create로 주게 되면(꼭 해당 상황에서만 발생하지는 않지만) sequence 생성 및 최초 실행 시 next 값을 두 번 호출한다. // 저장할 Member Entity @Entity @SequenceGenerator( name = "MEMBER_SEQ_GENERATOR")// default 값 public class Member { @Id @GeneratedValue(strategy = GenerationType.SEQUE.. 2022. 1. 25. [JPA] 자바 ORM 표준 JPA 프로그래밍 : 엔티티 매핑 엔티티 매핑 소개 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColum 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리하는 엔티티. 그 외에는 관리하지 않는 자유롭게 사용되는 클래스 JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수로 붙여줘야 함 ! 주의할 점 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) → reflection 등으로 기능이 추가되기 때문 final 클래스, enum, interface, inner 클래스 사용 불가 DB에 저장할 필드에 final 사용 불가 @Entity annotation 속성.. 2022. 1. 20. [JPA] 자바 ORM 표준 JPA 프로그래밍 : 영속성 관리 - 내부 동작 방식 JPA에서 가장 중요한 2가지 Mapping : 객체와 관계형 데이터를 각 어떻게 설계하여 매핑할 것인가. (설계 관련. 정적인 것) 영속성 컨텍스트 영속성 컨텍스트 : Entity를 영구 저장하는 환경 Entitymanager.persist(entity): DB에 저장하는 메소드가 아닌, 영속성 컨텍스트에 저장하는 메소드! 논리적인 개념. 가시적이지 않음. 엔티티 매니저를 통해 영속성 컨텍스트에 접근 엔티티 생명주기 영속성 컨텍스트의 이점 1차 캐시 ( 하나의 트랜젝션에서의 캐시) 영속성 컨텍스트 내부의 캐시 cf) 2차 캐시 : Application 전체에서 공유하는 캐시 동일성(identity) 보장 : 1차 캐시로 반복 가능한 읽기 (repeatable read) 등급의 트랜젝션 격리 수준을 데이.. 2022. 1. 16. [JPA] 자바 ORM 표준 JPA 프로그래밍 : JPA란, JPA 시작하기 JPA 소개 ORM : Object-realational mapping ( 객체 관계 매핑) 객체는 객체대로 설계, 관계형 데이터베이스는 관계형 데이터베이스대로 설계한 후 ORM 프레임워크가 중간에서 매핑 대중적인 언어에는 대부분 ORM 기술이 존재 (JPA, TypeORM ....) 객체와 RDB 두 기둥 위에 있는 기술 JPA : Java Persistence API, 자바 진영의 ORM 기술 표준 Application과 JDBC 사이에서 동작 매핑 정보를 바탕으로 Query 생성 후 DB에 전송 및 결과 반환 받음 패러다임의 불일치 해결 (Object - RDB) Hibernate (오픈소스) 바탕으로 만들어짐 JPA는 표준 명세 (인터페이스의 모음)이며 , 구현체 3가지 존재 Hibernate E.. 2022. 1. 16. 이전 1 다음