01. @MappedSuperclass 사용 목적 공통 매핑 정보가 필요할 때 사용한다. DB 입장에서 테이블은 다른데 객체 입장에서 상속 받아서 사용하고 싶을 때 사용한다. 아래 그림에서 id와 name이 공통 속성인 것을 볼 수 있다. @MappedSuperclass는 1) 상속관계 매핑이 아니다. 2) 엔티티를 나타내는 것이 아니며, 테이블과 매핑하지 않는다. 3) 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다. 4) 조회 및 검색이 불가능하다. 5) 직접 생성해서 사용할 일이 없으므로 추상 클래스로 만들기를 권장한다. 6) 테이블과 관계는 전혀 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할을 한다. 7) 주로 등록일, 수정일, 등록자, 수정자와 같은 전체 엔티티에..
01. 상속관계 매핑 상속관계 매핑 개요 객체에는 상속관계가 있지만, 관계형 데이터베이스에는 상속관계가 없다. 하지만 관계형 데이터베이스에서, 슈퍼타입-서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑 상속관계 매핑이란 슈퍼타입-서브타입 논리 모델을 실제 물리 모델로 구현하는 방법이다. 아래 그림이 논리 모델이다. 아래 그림은 객체의 상속 관계를 보여준다. 상속관계 매핑 방법 상속관계를 매핑하는 방법으로는 3가지가 있다. 조인 전략은 각각을 테이블로 변환하는 것이다. 단일 테이블 전략은 하나의 통합 테이블로 변환하는 것이다. 구현 클래스마다 테이블 전략은 서브타입 테이블로 변환하는 것이다. 02. 상속관계 주요 어노테이션 @Inheritance 상속관계 매핑 시 사용하며 슈퍼타입에 작..
01. 연관관계 매핑 시 고려사항 3가지 다중성 다대일 @ManyToOne 일대다 @OneToMany 일대일 @OneToOne 다대다 @ManyToMany 단방향, 양방향 테이블은 외래 키 하나로 양쪽에서 조인이 가능하다. 객체는 참조용 필드가 있는 쪽으로만 참조가 가능하다. 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향이라고 생각하면 된다. 사실 단방향, 양방향이라는 말은 우리가 이해하기 쉽게 사용하는 용어이다. 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 객체 양방향 관계는 참조가 2군데이다. (A에서 B로 참조하는 것 하나, B에서 A로 참조하는 것 하나) 객체 양항뱡 관계는 참조가 2군데 있으므로 둘 중 테이블의 외래 키를 관리할 곳을 지정해야 한다. 연관관계의..
01. 양방향 매핑 양방향 매핑 양방향으로 참조할 수 있는 것을 양방향 매핑이라고 한다. 테이블 연관 관계에서는, Team 입장에서 속한 Member를 알려면 Team의 TEAM_ID와 Member의 TEAM_ID를 조인하면 된다. 반대로 Member 입장에서 속한 Team을 알려면 Member의 TEAM_ID와 Team의 TEAM_ID를 조인하면 된다. 결국 같은 말이다. 즉 테이블 연관관계에서는, 외래키 하나로 양방향이 존재하는 것이다. 하지만 객체 연관관계의 경우에는 그렇지 않다. 양방향 객체 연관관계 양방향 객체 연관관계를 그림으로 나타내면 다음과 같다. 이를 코드로 나타내면 다음과 같다. Member 엔티티는 단방향과 동일하고, Team 엔티티만 Member를 List 형식으로 추가하면 된다. ..
01. 간단한 용어 정리 방향 (Direction) : 단방향, 양방향 다중성 (Multiplicity) : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:N) 연관관계의 주인 (Owner) : 객체 양항뱡 연관관계는 관리 주인이 필요하다. 02. 연관관계가 필요한 이유 객체를 테이블에 맞추어 모델링 하는 경우 즉, 연관관계가 없는 객체를 말한다. 이 경우, 참조 대신에 외래 키를 그대로 사용한다. Entity는 다음과 같이 작성할 수 있다. @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column..
01. 요구사항 추가 정리 요구사항은 다음과 같다. 회원은 일반 회원과 관리자로 구분된다. 회원 가입일과 수정일이 있어야 한다. 회원을 설명하는 필드가 있어야 하고, 이 필드는 길이 제한이 없다. 02. 요구사항에 따른 코드 및 Mapping Annotation 정리 요구사항에 따른 코드 다음은 Member 클래스이다. @Entity @Getter @Setter public class Member { @Id private Long id; @Column(name = "name") private String username; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType; @Temporal(TemporalType.TIM..
01. 데이터베이스 스키마 자동 생성 데이터베이스 스키마 자동 생성 DDL(Data Definition Language)을 애플리케이션 실행 시점에 자동으로 생성한다는 뜻이다. 테이블 중심보다는 객체 중심이다. 데이터베이스 방언을 활용하여 데이터베이스에 맞는 적절한 DDL이 생성된다. 생성된 DDL은 개발 장비에서만 활용해야 한다. 운영서버에서는 사용하지 않기를 적극 권장하고, 적절히 다듬은 후 사용해야 한다. 02. 데이터베이스 스키마 자동 생성의 속성 속성은 다음과 같다. 옵션 설명 create 기존테이블 삭제 후 다시 생성 (drop + create) create-drop create와 동일하지만 종료 시 테이블 drop update 변경된 내용만 반영 validate 엔티티와 테이블이 정상 매핑되..
01. @Entity @Entity란? @Entity가 붙은 클래스는 JPA가 관리한다. JPA로 테이블과 매핑할 클래스는 @Entity를 꼭! 붙여야 한다. @Entity 사용 시 주의할 점 파라미터가 없고 접근 지정자는 public 혹은 protected인 기본 생성자가 필수로 있어야 한다. final 클래스, inner 클래스, enum, interface 에 사용하면 안된다. 저장할 필드에 final을 사용하면 안된다. @Entity의 속성 name JPA에서 사용할 엔티티 이름을 지정한다. 기본값은 클래스 이름을 그대로 사용하는 것이다. 같은 클래스 이름이 없으면 가급적 기본값을 사용하는 것이 좋다. 02. @Table @Table이란? 엔티티와 매핑할 테이블을 지정하는 것이다. @Table의 ..