본문 바로가기

JPA22

[JPA] 프록시와 연관관계 관리 프록시 테이블을 조회해서 객체를 가져올 때 연관관계가 맺어진 객체까지 모두 조회하게 된다. 객체를 조회할 때 연관관계가 맺어진 객체는 안 가져오고 싶다면 어떻게 해야 할까? em.find() : 데이터베이스를 통해서 실제 엔티티 객체를 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 -> DB에 SQL은 전송되지 않지만 조회된다. em.find()를 사용하면 호출 시점에 즉시 데이터베이스에 SQL이 전송되지만 em.getReference()을 사용하면 호출 즉시가 아닌 em.getReference()를 통해 가져온 객체를 사용하는 시점에 SQL이 전송된다. User findUser = em.find(User.class, user.getId()); // .. 2023. 4. 19.
[JPA] 고급매핑 - 상속관계 매핑, @MappedSuperClass 매핑 정보 상속 상속관계 매핑 객체는 상속관계가 있지만 관계형 데이터 베이스는 상속관계가 없다. DB의 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하다. 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 → 조인 전략 통합 테이블로 변환 → 단일 테이블 전략 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 JPA는 어떠한 전략으로 테이블을 구성했더라도 상속관계 매핑을 지원한다. 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테.. 2023. 4. 18.
[JPA] 다양한 연관관계 매핑 - 다대다 다대다 [N:M] 실무에서는 사용하면 안된다. 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어내야한다. 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계를 만들 수 있다. 그래서 JPA는 연결 테이블을 매핑 시키는 기능을 지원해준다. 다대다 단방향 @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String username; @ManyToOne @JoinColumn(name = "TEAM_ID", insertable = false, updatable = false).. 2023. 4. 14.
[JPA] 다양한 연관관계 매핑 - 일대일 일대일[1:1] 일대일 ↔ 일대일 대칭성을 갖는다. 일대일 관계이기 때문에 주 테이블이나 대상 테이블 중에 외래키를 선택하여 넣을 수 있다. 외래키에 데이터베이스 유니크(UNI) 제약조건이 추가되야 사용할 수 있다. 일대일 : 주 테이블에 외래 키 단방향 요구사항 하나의 회원은 하나의 사물함을 가지고 있다. 하나의 사물함은 하나의 회원만 사용할 수 있다. @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String username; @ManyToOne @JoinColumn(name = "TEAM_ID", insertable = false, up.. 2023. 4. 14.