mapping 6

[JAVA] @MappedSuperclass

공통 매핑 정보가 필요할 때 사용한다.( id, name 과 같은 ) : DB 에서는 다른 컬럼이지만 객체에서 반복적으로 사용될때 ( 귀찮음을 줄이기 위한 것 ) 상속관계 매핑 불가. 엔티티, 테이블과 매핑이 불가하다 부모클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다. 조회, 검색이 불가(em.find(BaseEntity) X) 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장 예시 ) 만약 Member와 Team 테이블에 생성한 사람, 생성날짜, 수정한 사람 , 수정 날짜 를 공통적으로 사용하고 싶다면? 1. BaseEntity 생성 package hellojpa; import javax.persistence.MappedSuperclass; import java.time.LocalDateT..

JAVA 2022.01.04

[JAVA] JPA 고급 매핑 (상속 관계 매핑)

상속관계 매핑 관계형 데이터 베이스는 상속 관계를 구현 할 수 없다는 단점을 가지고 있다. 그나마 슈퍼타입, 서브타입 관계가 객체 상속과 유사하다. 슈퍼타입, 서브타입 논리모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 : 조인 전략(Joined) 통합 테이블로 변환 : 단일 테이블 전략 서브타입 테이블로 변환 : 구현 클래스마다 테이블 전략 매핑 시 주로 사용하는 어노테이션 1. @Inheritance(strategy=InheritanceType.XXXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 2. @DiscriminatorColumn(name="DTYPE") → default가 DTYPE 3. @..

JAVA 2021.12.16

[JAVA] JPA 연관관계 매핑( 양방향 )

양방향 연관관계 @OneToMany, @ManyToOne 을 예로 들 수 있다. 객체에는 양방향이 없다. ( 단방향 두개를 잘 묶어서 양방향인 것 처럼 보이게 할 뿐! ) 그럼 객체의 경우 단방향 두개 중 외래 키 관리를 누가 해야할까?? → 연관관계의 주인(Owner) 가 외래키를 관리! 양방향 연관관계 매핑의 규칙 객체의 두 관계 중 하나를 연관 관계의 주인으로 지정( 외래키 소유주를 주인으로 하는 걸 권장 ) 일대 다 기준에서 보통 '다' 쪽이 연관관계의 주인이다. 연관관계 주인만이 외래 키를 관리(등록, 수정) 한다. ( 주인이 아닌 쪽은 읽기만 가능 ) 주인은 mappedBy 사용 불가 mappedBy 속성으로는 주인의 이름을 지정해준다. Member.java /* 연관관계 주인 */ packa..

JAVA 2021.11.17

[JAVA] JPA 연관관계 매핑( 단방향 )

핵심 : 객체지향스럽게 매핑하는 방법 예제 시나리오 - 회원과 팀이 있다. - 회원은 하나의 팀에만 소속될 수 있다. - 회원(N)과 팀(1)은 다대일 관계이다. 1. 객체를 테이블에 맞추어 모델링( 참조 대신 외래키를 그대로 가져와 사용한다. ) Member.java ( teamId 주목 ) @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @Column(name = "TEAM_ID") private Long teamId; } JpaMain.java package hellojpa; import..

JAVA 2021.11.16

[JAVA] JPA 필드와 컬럼 매핑

요구사항 회원은 일반회원과 관리자로 구분해야 한다. 회원 가입일과 수정일이 있어야 한다. 회원을 설명할 수 있는 필드가 있어야 한다. 이때 필드의 길이는 제한이 없다. 매핑 어노테이션 정리 1. @Column - name : 필드와 매핑할 테이블의 컬럼 이름 ( default = 객체의 필드 이름 ) - insertable, updatable : 등록, 변경 가능 여부 ( default = true ) // 수정 불가능 하게 하고 싶을 때 @Column(name = "name", updatable = false) private String username; - nullable(DDL) : null 값의 허용 여부 , false 시 not null 제약조건 붙음 - unique(DDL) : @Table 의..

JAVA 2021.11.10

[JAVA] JPA 엔티티 매핑 + DB 스키마 자동생성

@Entity @Entity가 붙은 클래스는 JPA가 관리한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 가 필수이다. ※ 주의사항 1. 기본 생성자가 필수이다. (파라미터가 없는 public 또는 protected 생성자) 2. final 클래스, enum, interface, inner 클래스 사용하지 않는다. 3. 저장할 필드에도 final을 사용하지 않는다. package hellojpa; import javax.persistence.Entity; import javax.persistence.Id; // Entity 이름은 기본으로 클래스 명으로 들어감 바꾸려면 -> Entity(name='test') // @Table(name = "MBR") 으로 테이블명을 바꿀수 있음 @Ent..

JAVA 2021.11.10