엔티티 매핑
@Entity
- @Entity가 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라 부른다.
- 테이블과 매핑할 클래스에 붙인다.
속성 | 기능 | 기본값 |
---|---|---|
name | JPA에서 사용할 엔티티 이름을 지정 | 설정값이 없으면 클래스 이름을 그래도 사용 |
- 주의 사항
- 기본 생성자는 필수이다.
- final 클래스, enum, interface, inner 클래스에는 사용할 수 없다.
- 저장할 필드에 final을 사용하면 안 된다.
@Table
- @Table은 엔티티와 매핑할 테이블을 지정한다.
속성 | 기능 | 기본값 |
---|---|---|
name | 매핑할 테이블 이름 | 엔티티 이름 |
catalog | catalog 기능이 있는 데이터베이스에서 catalog를 매핑 | |
sehema | catalog 기능이 있는 데이터베이스에서 sehema를 매핑 | |
uniqueConstraints(DDL) | DDL 생성 시에 유니크 제약조건을 만든다. 2개 이상의 복합 유니크 제약조건을 만들수 있다. |
@Enumerated
- @Enumerated는 자바에서 제공하는 enum을 사용할때 사용한다.
속성 | 기능 | 기본값 |
---|---|---|
value | EnumType 설정 | EnumType.ORDINAL |
EnumType
- EnumType.ORDINAL : enum 순서 값을 DB에 저장
- EnumType.STRING : enum 이름을 DB에 저장
@Temporal
- @Temporal는 자바의 날짜 타입을 사용할때 사용한다.
- 자바8에서 지원하는 LocalDate, LocalDateTime을 사용할때 생략 가능
속성 | 기능 | 기본값 |
---|---|---|
value | TemporalType 설정 | TemporalType.Date |
TemporalType
- TemporalType.DATE: 날짜, 데이터베이스의 date타입과 매핑 (예: 2013-10-11)
- TemporalType.TIME: 시간, 데이터베이스의 time타입과 매핑 (예: 12:00:00)
- TemporalType.TIMESTAMP: 날짜와 시간, 데이터베이스의 timestamp타입과 매핑 (예: 2013-10-11 12:00:00)
@Lob
- @Lob은 길이 제한이 없을 때 사용한다.
- 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑
@Id
- @Id는 테이블의 기본 키에 매핑할때 사용한다.
- 기본 키를 직접 할당해 주어야 한다.
@SequenceGenerator
- @SequenceGenerator 는 기본 키를 직접 할당하는 대신 데이터베이스가 생성해주는 값을 설정하도록 위임할때 사용한다.
속성 | 기능 | 기본값 |
---|---|---|
strategy | GenerationType 설정 | GenerationType.AUTO |
GenerationType
- GenerationType.IDENTITY
- 기본키 생성을 데이터베이스에 위임한다. 즉 @Id값을 null로 하면 DB에서 AUTO_INCREMENT를 해서 자동으로 id값을 넣어주게된다. ex) MySQL
- AUTO_INCREMENT는 INSERT 쿼리 실행이후 id값을 설정하기 때문에 영속성 컨텍스트의 1차에서 관리불가하다. 그렇기 때문에 IDENTITY의 경우 EntityManager.persist() 를 하는 시점에서 INSERT SQL을 실행하기 때문에 식별자를 조회하여 영속성 컨텍스트의 1차 캐시에 값을 넣는다.
- GenerationType.AUTO
- 기본 설정 값으로 각 데이터베이스에 맞게 자동으로 기본키를 생성해준다.
- GenerationType.SEQUENCE
- 데이터 베이스 Sequence Object를 사용하여 데이터베이스가 자동으로 기본키를 설정하는데 @SequenceGenerator 어노테이션을 필수로 넣어야한다. ex)Oracle
- GenerationType.TABLE
- 키 생성 전용 테이블을 하나 만들어 사용하는 방식으로 @TableGenerator 를 필요로 하고 Sequence 와 유사하다.
@Column
- @Column은 객체 필드를 테이블 컬럼에 매핑할때 사용한다.
속성 | 기능 | 기본값 |
---|---|---|
name | 필드와 매핑할 테이블의 컬럼 이름 | 객체의 필드 이름 |
nullable(DDL) | null 값의 허용 여부 설정 | true |
unique(DDL) | @Table의 uniqueConstraints와 같지만 한 컬럼에 간단한 유니크 제약조건을 걸 때 사용. 두 컬럼 이상을 사용해서 유니크 제약조건을 사용하려면 클래스 레벨에서 @Table.uniqueConstraints를 사용 | |
columnDefinition(DDL) | 데이터베이스 컬럼정보를 직접 줄 수 있다. | 필드의 자바 타입과 방언 정보를 토대로 컬럼 타입 생성 |
length(DDL) | 문자 길이 제약조건, String 타입에만 사용 | 255 |
precision, scale(DDL) | BigDecimal 타입에서 사용 precision : 소수점을 포함한 전체 , scale : 소수의 자릿수 | precision = 19, scale = 2 |
@Transient
- @Traisient 는 매핍을 하지않을 때 사용한다.
- 데이터베이스에 저장하지 않고 조회하지도 않는다. 임시로 어떤 값을 보관하고 싶을 때 사용
@Access
- @Access는 JPA가 엔티티 데이터에 접근하는 방식을 지정할 때 사용한다.
- @Id 가 필드 , 프로퍼티냐 에따라 자동으로 해주기 때문에 생략한다.
속성 | 기능 | 기본값 |
---|---|---|
value | AccessType 설정 |
AccessType
- AccessType.FIELD : 필드에 직접 접근 private 여도 가능
- AccessType.PROPERTY : getter 로 접근