[JPA] 4. 엔티티 매핑

DAUN JO·2021년 11월 5일
0

JPA

목록 보기
1/11
post-thumbnail

[JPA] 엔티티 매핑

자바 ORM 표준 JPA 프로그래밍 공부 기록


📍 @Entity

@Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.

  • 기본 생성자 필수
  • final 클래스, enum, interface, inner 클래스 사용 X
  • 저장할 필드에 final 사용 X



📍 데이터베이스 스키마 자동 생성 속성

hibernate.hbm2ddl.auto

  • create
    기존테이블 삭제 후 다시 생성 (DROP + CREATE)
  • create-drop
    create와 같으나 종료시점에 테이블 DROP
  • update
    변경분만 반영(운영DB에는 사용하면 안됨)
  • validate
    엔티티와 테이블이 정상 매핑되었는지만 확인
  • none
    사용하지 않음



필드와 컬럼 매핑

  1. 회원은 일반 회원과 관리자로 구분해야 한다.
  2. 회원 가입일과 수정일이 있어야 한다.
  3. 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제
    한이 없다.
@Entity
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "name")
    private String userName;

    private Integer age;

    @Enumerated(EnumType.STRING) //enum 타입 매핑
    private RoleType roleType;

    @Temporal(TemporalType.TIMESTAMP) //날짜 타입 매핑
    private Date createdDate;

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

    @Lob //BLOB, CLOB 매핑
    private String description;

    public Member(){
    }

}



IDENTITY 전략

기본 키 생성을 DB에 위임한다.

=> DB에 값을 저장하고 나서야 기본 키 값을 구할 수 있을 때 사용


Entity가 영속상태가 되려면 반드시 식별자가 필요하다. 그런데 IDENTITY 전략은 DB에 저장해야 식별자를 알 수 있으므로 persist()했을 때 바로 DB에 저장된다. 즉 트랜잭션을 지원하는 쓰기 지연이 동작하지 않는다.



SEQUENCE 전략

데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한
데이터베이스 오브젝트

persist 호출할 때, 먼저 DB 시퀀스를 사용해서 식별자를 조회한다. 그리고 해당 식별자를 Entity에 할당한 후에 Entity를 영속성 컨텍스트에 저장한다. 이후 트랜잭션을 커밋해서 flush가 일어나면 Entity를 DB에 저장한다.


<-> IDENTITY 전략과의 차이
IDENTITY 전략은 먼저 Entity를 DB에 저장한 후에 식별자를 조회해서 Entity의 식별자에 할당한다.


@Entity
@SequenceGenerator(
name = “MEMBER_SEQ_GENERATOR",
sequenceName = “MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
initialValue = 1, allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;

TABLE 전략

키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략



권장하는 식별자 전략

  • 기본 키 제약 조건: null 아님, 유일, 변하면 안된다.
  • 미래까지 이 조건을 만족하는 자연키는 찾기 어렵다. 대리키(대
    체키)를 사용하자.
  • 예를 들어 주민등록번호도 기본 키로 적절하기 않다.
  • 권장: Long형 + 대체키 + 키 생성전략 사용
    (또는 String 난수 형태)
profile
🍕

0개의 댓글