티스토리 뷰

객체와 테이블 매핑

 

@Entity

  • @Entity가 붙은 클래스를 엔티티라 부른다.
  • 테이블과 매핑할 클래스에 붙는다.
  • 기본 생성자(파라미터가 없는 생성자)는 필수다.

@Table

  • 엔티티와 매핑할 테이블을 지정 ex) Table(name="MEMBER")
  • 생략하면 엔티티 이름을 테이블 이름으로 사용한다.

 

기본 키 매핑

 

직접 할당 전략 : 기본 키를 애플리케이션에서 직접 할당한다.

@Id
@Column(name = "Id")
private String id;

Board board = new Board();
board.setId("id1");	//기본 키 직접 할당
em.persist(board);

 

자동 생성 전략 : 대리 키 사용 방식

  • IDENTITY : 기본 키 생성을 데이터베이스에 위임  ex) MySQL
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;


Board board = new Board();
em.persist(board);

 

  • SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키를 할당  ex) 오라클
@Entity
@SequenceGenerator(
  name = "BOARD_SEQ_GENERATOR",	// 식별자 생성기 이름
  sequenceName = "BOARD_SEQ",  // 데이터베이스에 등록되어 있는 시퀀스 이름
  initialValue = 1,   // 처음 시작하는 수를 지정
  allocationSize = 1  // 시퀀스 한 번 호출에 증가하는 수
)
public class Board {
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "BOARD_SEQ_GENERATOR")
  private Long id;
  ...
}


Board board = new Board();
em.persist(board);

 

  • TABLE : 키 생성 테이블을 사용
@Entity
@TableGenerator(
  name = "BOARD_SEQ_GENERATOR",	// 식별자 생성기 이름
  table = "MY_SEQUENCES",  // 키생성 테이블명
  pkColumnValue = "BOARD_SEQ",   // 시퀀스 컬럼명
  allocationSize = 1  // 시퀀스 한 번 호출에 증가하는 수
)
public class Board {
  @Id
  @GeneratedValue(strategy = GenerationType.TABLE, generator = "BOARD_SEQ_GENERATOR")
  private Long id;
  ...
}


Board board = new Board();
em.persist(board);

 

 

 

필드와 컬럼 매핑

 

@Column

  • 컬럼을 매핑한다.
@Column(nullable = false)
private String data;

@Column(unique = true)
private String username;

@Column(columnDefinition = "varchar(100) default 'EMPTY'")
private String data;

@Column(length = 400)
private String data;

@Column(precision = 10, scale = 2)
private BigDecimal cal;

cal numeric(10, 2)  //H2, PostgreSQL
cal number(10, 2)  //Oracle
cal decimal(10, 2)  //MySQL

 

@Enumerated

  • enum 타입을 매핑한다.
  • EnumType.ORDINAL은 enum에 정의된 순서대로 데이터베이스에 저장한다.
  • EnumType.STRING은 enum 이름 그대로 데이터베이스에 저장한다.
    • 데이터베이스에 저장되는 데이터의 크기가 크지만 enum의 순서가 바뀌거나 추가되어도 안전하다.
enum RoleType {
  ADMIN, USER
}

@Enumerated
private RoleType roleType;
member.setRoleType(RoleType.ADMIN);  // 1

@Enumerated(EnumType.STRING)
private RoleType roleType;
member.setRoleType(RoleType.ADMIN);  // ADMIN

 

@CreationTimestamp, @UpdateTimestamp

  • @CreationTimestamp : INSERT 시 현재시간을 저장
  • @UpdateTimestamp : UPDATE 시 현재시간을 저장

 

@CreationTimestamp
private Timestamp createDate;

@UpdateTimestamp
private Timestamp updateDate;

 

@Lob

  • 매핑하는 필드 타입이 문자면 CLOB을 매핑하고 나머지는 BLOB을 매핑한다.
  • CLOB : String, char[]
  • BLOB : byte[]
@Lob
private String lobString;

@Lob
private byte[] lobByte;

 

@Transient

  • 필드에 매핑하지 않는다.
  • 데이터베이스에 저장하지 않고 조회하지도 않는다.
@Transient
private Integer temp;

 

 

참고

김영한, 『자바 ORM 표준 JPA 프로그래밍』, 에이콘출판주식회사(2015)

@CreationTimestamp, @UpdateTimestamp - monkeybusiness.tistory.com/29

댓글
Total
Today
Yesterday
링크
Apple 2023 맥북 프로 14 M3, 스페이스 그레이, M3 8코어, 10코어 GPU, 512GB, 8GB, 한글