본문 바로가기

JPA7

[JPA] 프록시와 지연로딩 본 게시글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 정리한 내용입니다. 필요한 연관관계만 조회해 오는 것이 효과적이다 JPA를 사용하면 객체 그래프를 통해 연관관계를 탐색할 수 있다 엔티티들은 데이터베이스에 저장되어 있다 한 객체 조회 시 연관되어 있는 엔티티들을 모두 조회하는 것 보다는 필요한 연관관계만 조회해 오는 것이 좋다 이를 위해 JPA는 지연로딩 방식을 지원, 하이버네이트(Hibernate)는 프록시 객체를 통해 지연 로딩을 구현한다 다음과 같은 객체 관계를 가질 때, Member를 조회할 시 Team도 함께 조회해야할까? 단순히 회원 이름만 출력한다면 Team까지 조회 쿼리를 날릴 필요가 없다. 이를 위해 지연로딩을 사용한다. JPA에서의 프록시 em.find() 와 .. 2023. 5. 19.
[JPA] 상속관계 매핑, @MappedSuperclass 본 게시글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 정리한 내용입니다. 상속관계 매핑 관계형 데이터베이스는 상속 관계X 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 조인 전략: 각각 테이블로 변환 단일 테이블 전략: 통합 테이블로 변환 구현 클래스마다 테이블 전략: 서브타입 테이블로 변환 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) => 부모 클래스에서 사용 JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 .. 2022. 7. 28.
[JPA] 다대일,일대다,일대일,다대다 (@ManyToOne,@OneToMany,@OneToOne,@ManyToMany) 본 게시글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 정리한 내용입니다. 연관관계 매핑시 고려사항 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래 키 를 관리할 곳을 지정해야함 연관관계의 주인: 외래 키를 관리하는 참조 주인의 반대편: 외래 키에 영향을 주지 않음, 단순 조회만 가능 연관 관계에 대한 추가적인 내용은 이전 글을 참고하세요 다대일[N:1] - @Many.. 2022. 7. 28.
[JPA] JPA 설정하기 본 게시글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 정리한 내용입니다. Maven 으로 새 프로젝트를 생성한다. pom.xml org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 1.4.199 JPA(인터페이스)의 구현체로 하이버네이트, 데이터베이스로 H2를 선택했다. H2 데이터베이스 특징 빠르고 작은 크기의 RDBMS(관계형 데이터베이스) 임베디드 및 서버모드(영구 데이터베이스), 인 메모리 데이터베이스 => 주로 메모리에 데이터를 저장, 디스크에 데이터를 저장할 수도 있음 MySQL, Oracle 데이터베이스 시뮬레이션 기능 시퀀스, AUTO INCREMENT 기능 지원 JPA 설정 - persistenc.. 2022. 7. 28.
[JPA] 연관관계 매핑 기초 본 게시글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 정리한 내용입니다. 연관관계가 필요한 이유 이전 강의 까지 객체에 외래키 를 직접 필드로 넣는 방식으로 설계를 하였지만 그런 방식은 객체지향적이라고 할 수 없다. JPA는 자바 표준 ORM 으로서 객체는 객체답게, 테이블은 테이블 답게 설계하기 위해 존재한다. 때문에 패러다임 불일치를 해결하기 위해 연관관계 매칭을 하여야한다. 참조 대신 객체가 외래 키를 그대로 사용하는 것은 객체 끼리의 연관관계가 없는 것과 같다. 객체를 테이블에 맞추어 모델링 하는 경우 아래와 같이 저장, 조회가 이루어지는데 이는 객체 지향적이라고 볼 수 없다. //팀 저장 Team team = new Team(); team.setName("TeamA"); e.. 2022. 7. 28.
[JPA] 엔티티 매핑 본 게시글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 정리한 내용입니다. 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리한다 JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 가 필수 기본 생성자 필수 final 클래스, enum, interface, inner 클래스 사용X 저장할 필드에 final 사용X @Entity(name="Member") public class Memeber{ @Id private Long id; private String name; } name 속성을 통해 JPA에서 사용할 엔티티 이름을 지정할 수 있다. 같은 이름의 클래스가 있는 것이 아니면 가급적 기본값(클래스 이름 그대로)을 사용한다. @Table @Table은.. 2022. 7. 28.