@Entity
가 붙은 클래스는 JPA가 관리
, 엔티티라 한다.
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity
필수
기본 생성자 필수
(파라미터가 없는 public or protected)enum, interface inner 클래스에 사용 ❌
속성 : name
@Table
은 엔티티와 매핑할 테이블 지정생성된 DDL은 개발 장비에서만 사용
운영 장비에는 절대 create, create-drop, update 사용하면 안 된다.
create
or update
update
or validate
validate
or none
package hellojpa;
import javax.persistence.*;
import java.time.LocalDate;
import java.util.Date;
@Entity
public class Member2 {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String username;
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date cereatedDate;
private LocalDate lastModifiedDate;
@Lob
private String description;
@Transient
private int tmp_number;
}
java.util.Date, java.util.Calendar
을 매핑할 때 사용데이터베이스 BLOB
, CLOB
타입과 매핑
@Lob
에는 지정할 수 있는 속성이 없다.
매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑
CLOB
: String, char[], java.sql.CLOB BLOB
: byte[], java.sql. BLOB
CLOB(Character Large Object)
- 데이터베이스 관리 시스템에 쓰이는 문자 데이터의 모임
BLOB(Binary Large Object)
- 데이터베이스 관리 시스템의 하나의 엔티티로서 저장되는 이진 데이터의 모임
@Transient
private Integer temp;
직접 할당 : @Id
만 사용
자동 생성 (@GeneratedValue
)
IDENTITY
: 데이터베이스에 위임, MYSQL SEQUENCE
: 데이터베이스 시퀀스 오브젝트 사용, ORACLE, @SequenceGenerator
필요TABLE
: 키 생성용 테이블 사용, 모든 DB에서 사용, @TableGenerator
필요AUTO
: 방언에 따라 자동 지정, 기본값@Entity
@SequenceGenerator(
name = "MEMBER_SEQ_GENERATOR",
sequenceName = "MEMBER_SEQ",
initialValue = 1
)
public class Member2 {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MEMBER_SEQ_GENERATOR")
@Column(name = "MEMBER_ID")
private Long id;
...
}
@Entity
@TableGenerator(
name = "MEMBER_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnName = "MEMBER_SEQ", allocationSize = 1)
public class Member2 {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "MEMBER_SEQ_GENERATOR")
@Column(name = "MEMBER_ID")
private Long id;
...
}
기본 키 제약 조건
: null 아님, 유일, 변하면 안 된다.
권장 : Long형 + 대체키 + 키 생성 전략 사용
회원 기능
상품 기능
주문 기능