티스토리 뷰
객체와 테이블 매핑
@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
'Framework > Spring Data JPA' 카테고리의 다른 글
우아한테크캠프 Pro 5기 - Spring Data JPA (0) | 2022.11.24 |
---|---|
[JPA/Hibernate] 프록시와 연관관계 관리 (0) | 2021.06.29 |
[JPA/Hibernate] 고급 매핑 (0) | 2021.06.28 |
[JPA/Hibernate] 연관관계 매핑 기초 (0) | 2021.05.25 |
[JPA/Hibernate] 영속성 관리 (0) | 2021.04.28 |
댓글