BackEnd/JPA (8) 썸네일형 리스트형 [JPA] 값 타입 (기본값, 임베디드, 컬렉션 등) 기본값 타입 JPA의 데이터 타입 분류엔티티 타입- @Entity로 정의하는 객체를 의미한다.- 데이터가 변해도 식별자(PK)로 지속해서 주적이 가능하다. 예) 회원 엔티티의 키와 나이가 변경되도 식별자를 통해 회원의 정보를 찾을 수 있다.값 타입- int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 의미한다.- 식별자가 없고 값만 있으므로 변.. [JPA] 고급매핑 (상속관계, @MappedSuperclass) 상속관계 매핑 관계형 데이터베이스는 상속관계가 존재하지 않는다. 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하다. 상속관계 매핑 : 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 - 각각 테이블로 변환 ⇒ 조인 전략 - 통합 테이블로 변환 ⇒ 단일 테이블 전략 - 서브 타입 테이블로 변환 ⇒ 구현 클래스마다 테이블 전략 (실무사용X) 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) : 테이블을 어떻게 구현할지 전략을 설정한다. - JOINED : 조인 전략 - SINGLE_TABLE : 단일 테이블 전략 (default 전략) - TABLE_PER_CLASS : 구현 클.. [JPA] 프록시와 연관관계 관리 프록시 em.find() vs em.getReference() em.find() : 데이터베이스를 통해 실제 엔티티 객체를 조회한다. em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회한다. 프록시 특징 실제 클래스를 상속 받아서 만들어지며, 실제 클래스와 겉 모양이 같다. 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. 프록시 객체는 실제 객체의 참조(target)을 보관한다. 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. 프록시 객체의 초기화 프록시 객체는 처음 사용할 때 한번만 초기화 된다. 프록시 객체를 초기화 할때, 프록시 객체가 실제 엔티티로 바뀌는 것이 아니다. 초기화 되면 프록시 객체를 통해.. [JPA] 상속관계 매핑 전략(@Inheritance, @DiscriminatorColumn) 상속관계 매핑관계형 데이터베이스는 상속관계가 없다.슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하다.슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법- 각각 테이블로 변환 → 조인 전략- 통합 테이블로 변환 → 단일 테이블 전략- 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 (구조적 결함이 커 실무에서 미사용) 주요 어노테이션@Inheritance(strategy=InheritanceType.XXX)- JOINED : 조인 전략- SINGLE_TABLE : 단일 테이블 전략- TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 (실무 미사용)@DiscriminatorColumn(name="DTYPE"): 하위 클래스를 구분하는 용도의 컬럼이며 기본 값은 "D.. [JPA] 연관관계 매핑 연관관계 매핑 시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 다대일 : @ManyToOne 일대다 : @OneToMany ( 다대일을 권장 ) 일대일 : @OneToOne 다대다 : @ManyToMany (실무에서 사용안함) 단방향, 양방향 테이블 : 외래 키 하나로 양쪽 조인이 가능하며, 사실 방향이라는 개념이 존재하지 않는다. 객체 : 참조용 필드가 있는 쪽으로만 참조가 가능하며, 한쪽만 참조시 양방향, 양쪽을 참조시 양방향이다. 연관관계의 주인 테이블은 외래 키 하나로 두 테이블의 연관관계를 맺는다. 객체 양방향 관계는 A→B, B→A 처럼 참조가 각각 있어야 하며 둘 중 외래 키를 관리할 곳을 지정해야 한다. 연관관계의 주인 : 외래 키를 관리하는 참조 주인의 반대편 : 외래 .. [JPA] 연관관계 매핑 기초 연관관계가 필요한 이유 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. 객체를 테이블에 맞추어 모델링 ⇒ 연관관계가 없는 객체 ⇒ 참조 대신 외래키를 그대로 사용 @Entity public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; @Column(name = "username") private String name; @Column(name = "team_id") private String teamId; ... } @Entity public class Team { @Id @generatedValue @Column(name = "team_id") priv.. [JPA] 엔티티 매핑 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리하는 엔티티라 한다. @Entity 속성 name : JPA에서 사용할 엔티티 이름을 지정한다. (기본값 : 클래스명) 주의 - 기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자) - final 클래스, enum, interface, inner 클래스는 사용할 수 없다. - 저장할 필드에 final을 사용할 수 없다. @Table @Table은 엔티티와 매핑할 테이블을 지정한다. 속성 name : 매핑할 테이블 이름 (기본값 : 엔티티 이름을 사용) 속성 catalog/schema : 데이터베이스 catalog/schema 매핑 속성 uniqueConstraints(DDL) : DDL 생성 시에 유니.. [JPA] 영속성 컨텍스트(Persistence Context)란? 영속성 컨텍스트란? 영속성 컨텍스트란 "엔티티를 영구적으로 저장하는 환경"을 의미하며 눈에 보이지 않는 논리적인 개념이다. 엔티티 매니저를 통해 영속성 컨텍스트에 접근이 가능하다. public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); ... } } 엔티티의 생명주기 비영속 (new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 // 객체를 생성한 상태(비영속) Member member = new Membe.. 이전 1 다음