1. 즉시로딩 @ManyToOne (fetch = FetchType.EAGER)// 즉시 로딩 전략 엔티티를 조회할 때 연관된 엔티티도 모두 즉시 조회 ex) 멤버가 팀에 속하는 관계 멤버 엔티티 조회할 때 팀 엔티티도 모두 조회됨 즉, 멤버와 팀 관련 select 쿼리가 모두 DB에 전송됨 이때 조회되는 팀은 프록시 객체가 아닌, Team 클래스 다대일 (N:1), 일대일 (1:1) 연관관계는 즉시로딩이 기본값 2. 지연로딩 @ManyToOne(fetch = FetchType.LAZY)// 지연 로딩 전략 엔티티를 조회할 때 연관된 엔티티는 프록시로 조회하고 실제 사용하는 시점에 초기화 됨 (DB 조회) ex) 멤버가 팀에 속하는 관계 멤버 엔티티 조회할 때 팀 엔티티는 조회되지 않음 (멤버 : DB에..
Spring Boot/JPA
연관관계 매핑 관련 게시물 2023.12.18 - [JPA] - [JPA] 연관관계 매핑 - 단방향 매핑, 양방향 매핑 2023.12.18 - [JPA] - [JPA] 연관관계 매핑 - 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 상속관계 매핑 관계형 데이터베이스에는 상속관계가 존재하지 않는다. 대신 슈퍼타입, 서브타입이 존재하는데 이를 객체의 상속관계로 풀어내는 매핑이다. 공통 어노테이션 @Inheritance(strategy = InheritanceType.XXXX) @DiscriminatorColumn(name = "구별자 컬럼 이름") @DiscriminatorValue("구별자 값") 상속관계 매핑 - 조인 전략 서브타입에 해당하는 Album, Book, Movie 모두..
단방향, 양방향, 연관관계 주인에 대한 설명과 예시 엔티티, 테이블은 링크 참고 2023.12.18 - [JPA] - [JPA] 연관관계 매핑 - 단방향 매핑, 양방향 매핑 연관관계 매핑 시 고려사항 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany => JPA의 어노테이션은 모두 DB와 매핑위해 존재한다. 따라서 DB관점에서의 다중성을 기준으로 설정! 다대일, 일대다 등 명칭은 '대' 앞의 '다', '일' 등에 해당하는 엔티티가 테이블의 외래키를 관리한다(연관관계 주인)는 뜻 방향성 단방향 : 한쪽만 참조 양방향 : 양쪽 모두 참조 연관관계의 주인 양방향 관계의 경우 외래키가 존재하는 테이블에서의 참조를 연관관계의 주인으로 ..
연관관계 매핑 테이블에서는 외래키만을 통해 연관 테이블을 찾는다. 즉, 외래키만으로 양방향의 연관관계를 갖는다. (사실 테이블에는 방향 개념이 존재하지 않는다.) 그러나 객체에서는 참조를 통해서 연관 객체를 찾는다. 따라서 하나의 참조는 단방향만의 관계를 갖는다. 이와 같이 테이블과 객체는 연관관계에서의 차이점이 분명하다. 이러한 차이점을 최소화 시켜주는 것이 JPA에서의 연관관계 매핑이다. 연관관계 매핑은 객체의 참조와 테이블의 외래키를 매핑하는 것이다. 연관관계를 맺어주지 않는다면 객체의 참조가 아닌 테이블에서의 외래키를 그대로 사용한다. 이때는 외래키 식별자를 직접 다루기 때문에 객체지향스럽지 못하다. 또한 조회에서도 마찬가지로 연관관계가 없으므로 계속 DB에서 끄집어 내야 한다. 따라서 연관관계 ..
1. 객체 - 테이블 매핑 @Entity JPA가 관리하는 클래스 ( = 엔티티 ) DB의 테이블과 매핑할 클래스는 @Entity 필수 JPA는 내부적으로 동적으로 객체를 생성해야 한다. 따라서 기본 생성자가 반드시 필요함! @Entity public class Member{ public Member(){}// 기본 생성자 } - @Entity(name = " ") 엔티티의 이름을 지정 기본값 : 클래스의 이름과 동일하게 @Entity(name = "USER")// JPA 에서 해당 엔티티의 이름을 "USER"로 관리 public class Member{ public Member(){} } @Table 해당 엔티티 (클래스) 가 DB에서의 어떤 테이블과 매핑할 지를 결정 기본값 : 엔티티 이름과 동일한 ..
영속성 컨텍스트 영속성 컨텍스트는 JPA를 사용함에 있어서 가장 중요한 요소이다. 영속성 컨텍스트 (persistence-context) 는 엔티티를 영구 저장하는 환경이라는 뜻이며, 눈으로는 볼 수 없는 논리적인 개념이다. 앞서 생성한 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. 2023.12.13 - [JPA] - [JPA] 엔티티 매니저 팩토리, 엔티티 매니저 하나의 엔티티 매니저가 하나의 영속성 컨텍스트와 매핑되지만 spring 프레임워크와 같은 컨테이너 환경에서는 여러개의 엔티티 매니저가 하나의 영속성 컨텍스트와 매핑된다. 영속성 컨텍스트와 관련하여 엔티티의 생명주기는 4가지가 있다. 엔티티의 생명주기 1 - 비영속 (new/transient) 비영속 상태란 단지 엔티티를 생성한 상태를 ..
엔티티 매니저 팩토리와 엔티티 매니저 웹 어플리케이션에서 요청이 들어올 때 마다 엔티티 매니저 팩토리 (Entity Manager Factory) 에서 엔티티 매니저 (Entity Manager)를 생성한다. 이 엔티티 매니저는 데이터 베이스 커넥션을 얻는 것이라고 생각할 수 있다. 엔티티 매니저 팩토리 엔티티 매니저 팩토리는 어플리케이션 구동 시점에 딱 하나만 생성하면 된다. EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistence-unit의 이름); 전체 어플리케이션이 종료하면 엔티티 매니저 팩토리도 닫아줘야 한다. emf.close(); 엔티티 매니저 엔티티 매니저는 실제 DB에 저장하는 등 의 트랜잭션 단위로 생성해..