@Entity(name = "")
@Table(name = "")
@Table(catalog = "")
@Table(schema = "")
@Table(uniqueConstraints = "")
create
: 기존 테이블을 삭제 후 다시 생성(DROP + CREATE)create-drop
: create와 같으나 종료시점에 테이블 DROPupdate
: 변경분만 반영(그래도 운영DB에는 사용하면 안됨)validate
: 엔티티와 테이블이 정상 매핑되었는지만 확인none
: 사용하지 않음@Column(nullable = false, length = 10)
등@Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"} )})
등package hellojpa;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@Entity
public class Member {
@Id
private Long id;
@Column(name = "name")
private String username;
private Integer age;
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
private String description;
//Getter, Setter…
}
hibernate.hbm2ddl.auto
@Column
: 컬럼 매핑@Temporal
: 날짜 타입 매핑@Enumerated
: enum 타입 매핑@Lob
: BLOB, CLOB 매핑@Transient
: 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)@Column(name = "")
: 필드와 매핑할 테이블의 컬럼 이름(기본값 : 객체의 필드이름)@Column(insertable = "", updatable = "")
: 등록, 변경 가능 여부(기본값 : TRUE)@Column(nullable = "")
: notNull 제약조건 사용여부@Column(unique = "")
: unique 제약조건 사용여부@Column(columnDefinition = "")
: 컬럼정보를 직접 입력할 수 있다(기본값 : 필드의 자바타입과 방언 정보를 사용해 생성)@Column(length = "")
: 문자 길이 제약조건, String 타입에만 사용(기본값 : 255)@Column(precision = "", scale = "")
: BigDecimal 타입에서 사용한다(BigInteger도 사용할 수 있다).자바 enum 타입을 매핑할 때 사용
@Enumerated(value = "")
(기본값 : EnumType.ORDINAL
)EnumType.ORDINAL
: enum 순서를 데이터베이스에 저장하는 방식EnumType.STRING
: enum 이름을 데이터베이스에 저장날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용
참고 : LocalDate, LocalDateTime을 사용할 때는 생략 가능(JAVA 8버전 부터 지원)
@Temporal(value = "")
TemporalType.DATE
: 날짜, 데이터베이스 date 타입과 매핑(예: 2013–10–11)TemporalType.TIME
: 시간, 데이터베이스 time 타입과 매핑(예: 11:11:11)TemporalType.TIMESTAMP
: 날짜와 시간, 데이터베이스 timestamp 타입과 매핑(예: 2013–10–11 11:11:11)데이터베이스 BLOB, CLOB 타입과 매핑
@Lob
에는 속성이 없다@Id
@GeneratedValue
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
직접 할당 : @Id
만 사용
자동 생성 : @GeneratedValue
GenerationType.IDENTITY
: 데이터베이스에 위임, MYSQLGenerationType.SEQUENCE
: 데이터베이스 시퀀스 오브젝트 사용, ORACLE@SequenceGenerator
필요GenerationType.TABLE
: 키 생성용 테이블 사용, 모든 DB에서 사용@TableGenerator
필요GenerationType.AUTO
: 방언에 따라 자동 지정, 기본값@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;
주의 : allocationSize 기본값 = 50
@SequenceGenerator(name = "")
: 식별자 생성기 이름(기본값 : 필수)@SequenceGenerator(sequenceName = "")
: 데이터베이스에 등록되어 있는 시퀀스 이름(기본값 : hibernate_sequence)@SequenceGenerator(initialValue = "")
: DDL 생성 시에만 사용됨, 시퀀스 DDL을 생성할 때 처음 1 시작하는 수를 지정한다.(기본값 : 1)@SequenceGenerator(allocationSize = "")
: 시퀀스 한 번 호출에 증가하는 수(성능 최적화에 사용됨 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야 한다(기본값 : 50)@SequenceGenerator(catalog = "", schema = "")
: 데이터베이스 catalog, schema 이름@Entity
@TableGenerator(
name = "MEMBER_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnValue = “MEMBER_SEQ", allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
@TableGenerator(name = "")
: 식별자 생성기 이름(기본값 : 필수)@TableGenerator(table = "")
: 키 생성 테이블명(기본값 : hibernate_sequences)@TableGenerator(pkColumnName = "")
: 시퀀스 컬럼명(기본값 : sequence_name)@TableGenerator(valueColumnName = "")
: 시퀀스 값 컬럼명(기본값 : next_val)@TableGenerator(pkColumnValue = "")
: 키로 사용할 값 이름(기본값 : 엔티티 이름)@TableGenerator(initialValue = "")
: 초기 값, 마지막으로 생성된 값이 기준이다(기본값 : 0)@TableGenerator(allocationSize = "")
: 시퀀스 한 번 호출에 증가하는 수(성능 최적화에 사용됨, 기본값 : 50)@TableGenerator(catalog = "", schema = "")
: 데이터베이스 catalog, schema 이름@TableGenerator(uniqueConstraint s = "")
: 유니크 제약 조건을 지정할 수 있다출처 : https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
(자바 ORM 표준 JPA 프로그래밍 - 기본편)