
@Entity, @Table@Column@Id@ManyToOne, @JoinColumn@Entity 가 붙은 클래스는 JPA 가 관리한다는 의미이다.
JPA 를 사용해서 테이브로가 매핑하려면 이 어노테이션이 필수.
final, Enum, interface, inner 선언이 불가하다final 선언도 불가함name : 기본값은 클래스 이름이며 엔티티 이름을 설정해준다.DB 에 매핑될 테이블을 지정해주는 속성이다
name : 매핑 테이블 이름 (기본값: 엔티티 이름)Catalog : DB catalog 매핑Schema : DB schema 매핑uniqueConstraints(DDL) : DDL 생성 시에 유니크 제약 조건을 생성해준다.DB Dialect 를 활용, DB 에 맞는 적절한 DDL 문 생성 (운영서버 사용 X)create : 먼저 drop 후 createcreate-drop : create 와 같지만 마지막에 drop 을 한 번 더 해줌update : Column 변경시에만 반영하여 ddl 작성 (추가만 적용됨)validate : 엔티티와 테이블의 매핑 상태 체크none : 아무 말이나 쓰는 것과 같지만 관례상 none 으로 설정하거나 주석처리@Column(nullable = false, length = 10)@Table(uniqueConstraints = {@uniqueConstraints(name="NAME_AGE_UNIQUE",ColumnNames={"NAME","AGE"})})이러한 DDL 문과 관련된 옵션은 실행조직과는 연관이 없음.
@Column : 컬럼 매핑@Temporal : 날짜 타입 매핑@Enumerated : Enum 타입 매핑@Lob : BLOB, CLOB 매핑@Transient : 특정 필드를 매핑하지 않음 ( 매핑 무시)name : 필드와 매핑할 테이블의 컬럼 이름 (기본값: 객체의 필드 이름)insertable, updateable : 등록, 변경 가능 여부 (기본값: true)nullable (DDL) : null 값의 허용 여부 (기본값: true)unique (DDL) : Table 의 UniqueConstraint 와 같지만 하나의 컬럼 지정 시에 사용 (제약 조건 이름이 랜덤)columnDefinition (DDL) : DB 컬럼 정보를 직접 줄 수 있다. (필드의 자바 타입과 방언 정보를 사용해야함)length (DDL) : 문자 길이 제약 조건 (String 만)precision, scale (DDL) : 소수를 표현할 때 사용, BigDecimal 타입에서 사용 precision 은 소수점 포함 전체 자릿수, Scale 은 소수의 자릿수 (기본값: precision = 19, scale = 2)Enum 매핑 시에 사용함EnumType.Ordinal : Enum 의 순서를 DB에 저장 (기본값EnumType.String : 이름을 DB 에 저장 (String 사용 권장)TemporalType.DATE : 날짜, DB date 타입과 매핑TemporalType.TIME : 시간, DB Time 타입과 매핑TemporalType.TIMESTAMP : 날짜, 시간 매핑LocalDate, LocalDateTime 사용 시에는 생략 가능함
CLOB: char[], String, java.sql.CLOBBLOB: byte[], java.sql.BLOB@Id : 직접 할당@GeneratedValue : 자동 생성IDENTIFY : DB 에 위임 (Oracle 은 Sequence, MySQL 은 Auto Increment)SEQUENCE : DB 시퀀스 오브젝트 사용 (@SequenceGenerator 필요)TABLE : 키 생성 테이블 사용 (@TableGenerator 필요)AUTO : 방언에 따라 자동 지정 (기본 값)MySQL, PostgreSQL, SQL server, DB2 에서 사용Auto Increment, PostgreSQL 의 SerialINSERT SQL 을 실행함, 하지만 IDENTITY 전략은 INSERT SQL 실행 후 ID 를 알수 있음IDENTITY 전략은 em.persist() 실행 시에 즉시 SQL 을 실행하고 DB 에서 ID(PK) 값을 조회함 @Entity @SequenceGenerator(name="foo", sequenceName="bar", initialValue=1, allocationSize=1)@Id`` @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="foo")@SequenceGenerator 속성
name: 식별자 생성기 이름sequenceName: DB 에 등록할 시퀀스 이름initialValue(DDL) : 시퀀스 DDL 생성 시 시작 값allocationSize: 시퀀스 한 번 호출 시 증가하는 수 ( 미리 호출하여 값 범위 할당, 성능 최적화, 중간에 비는 값 발생 가능)catalog,schema: DB catalog, schema 매핑
테이블 생성 DDL
create table ms(
sequence_name varchar(255) not null,
next_val bigint,
primary key (sequence_name)
)
@Entity @TableGenerator(name="MSG", table="ms", pkColumnName="MB_SQ", allocationSize=1)@Id @GeneratedValue(strategy=GenerationType.TABLE, generator="MSG")속성
name : 식별자 이름 (필수)table : 키 생성 테이블 명 (기본값 : hibernate_sequences)pkColumnName : 시퀀스 컬럼명 (기본값 : sequence_name)valueColumnName : 시퀀스 값 컬럼 명 (기본값 : next_val)pkClumnValue : 키로 사용할 이름 (기본값 : 엔티티명)InitailValue : 초기 값, 마지막 생성 값이 기준 (기본값 : 0)allocationSize : 시퀀스 한 번에 호출 할 값 (기본값 : 50)catalog, schema : DB catalog, schema 매핑uniqueConstraints (DDL) : 유니크 제약 조건 생성