JPA:자바에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음이다.
@Entity
해당클래스를 테이블과 매핑한다고 JPA에게 알린다.
@Table
엔티티 클래스에 매핑할 테이블 정보를 지정한다.
만약 생략하게 되면 클래스 이름을 테이블 이름으로 매핑한다.
@Table 옵션
| name | 테이블 명 |
| catalog | 테이블 카테고리 |
| schema | 테이블 스키마 |
| uniqueConstraints | 컬럼값 유니크 제약조건 |
| indexes | 인덱스 생성 |
@Access
JPA가 엔티티 데이터에 접근하는 방식을 지정합니다.
@Entity
@Access(AccessType.FIELD)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
@Entity
@Access(AccessType.PROPERTY)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
@Access 옵션
| AccessType.Field | 필드에 직접 접근 |
| AccessType.PROPERTY | getter을 통해 접근 |
@Id
엔티티 클래스의 필드를 테이블의 기본키(PK)에 매핑합니다.
사용된 필드를 식별자 필드라 하며 주로 @GenerateValue와 같이 이용해서 식별키를 어떤 전략으로 생성하는지 명시한다.
@Column
엔티티 클래스의 필드를 컬럼에 매핑한다.
| name | 컬럼 이름 |
| unique | 유니크 여부(DDL) |
| nullable | null 허용 여부(DDL) |
| insertable | 추가 가능 여부(DDL, DML) |
| updateable | 수정 가능 여부(DDL, DML) |
| table | 테이블 이름(하나의 엔티티를 두개 이상의 테이블에 매핑할 때 사용 |
| columnDefinition | 데이터베이스 컬럼 정보 직접 부여(DDL) |
| length | 컬럼 사이즈(default:225) (DDL) |
| percision | 소수 정밀도(default:0) (DDL) |
| scale | 소수점 이하 자리수(default:0) (DDL) |
* DDL: 테이블, 뷰, 인덱스 및 프로시저와 같은 데이터베이스 및 개체의 구조를 정의
* DML: 데이터베이스 내의 데이터를 조작하는 데 사용
@GenerateValue
데이터베이스에 의해 자동으로 생성될 값에 대한 전략을 지정
보통 식별키 생성 전략으로 많이 사용
@GenerateValue 옵션AUTO: 특정 데이터베이스에 맞게 자동으로 생성되는 방식
@Id //primary key 설정
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
IDENTITY: 기본키 생성 방식 자체를 데이터베이스에 위임하는 방식 데이터베이스에 의존 방식(MySQL MariaDB 등)
@Id //primary key 설정
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
TABLE: 데이터베이스 종류 상관없이 별도의 키를 생성해주는 채번 테이블을 이용하는 방법
성능이 좋지않아 권장하진않는다.
@TableGenerator가 필요하다
@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;
}
| 속성 | 설명 | 기본 |
| name | 식별자 생성기 이름 | 필수 |
| table | 키생성 테이블명 | hibernate_sequence |
| pkColumnName | 시퀸스 컬럼명 | sequence_name |
| valueColumnName | 시퀸스 값 컬럼명 | next_val |
| pkColumnValue | 키로 사용할 값 이름 | 엔티티이름 |
| initialValue | 초기 값, 마지막으로 생성된 값이 기준 | 0 |
| allocationSize | 시퀸스 한 번 호출에 증가하는 수(성능 최적화에 사용) | 50 |
| catalog, schema | DB catalog, schema 이름 | |
| uniqueConstraints(DDL) | 유니크 제약 조건을 지정할 수 있음 |
SEQUENCE: 데이터베이스의 시퀸스를 이용해서 식별키 생성(ORACLE 등 시퀸스 제공 DB)
@SequenceGenerator가 필요하다
@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;
}
| name | 식별자 생성기 이름(필수) |
| sequenceName | DB에 등록되어 있는 시퀸스 이 |
| initialValue | DDL 생성 시에만 사용됨, 시퀀스 DDL을 생성할 때 처음 시작하는 수를 지정(Default:1) |
| allocationSize | 시퀀스 한 번 호출에 증가하는 수(성능 최적화에 사용됨) 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값 을 반드시 1로 설정해야 한다(Defaule: 50) |
| catalog, schema | 데이터베이스 catalog, schema 이름 |
@Index
인덱스를 지정합니다
@Entity
@Table(name = "MEMBER", indexes={
@Index(name = "idx__name__age", columnList = "name, age", unique = true)
})
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
| name | 인덱스 이름 |
| columnList | 인덱스를 지정할 컬럼들 |
| unique | 중복값 어용 여부(default:false[중복 허용]) |
@Enumerted
자바 enum타입을 매핑할 때 사용한다.
@Enumerated(EnumType.ORDINAL)
private Gender gender;
@Enumerated(EnumType.STRING)
private Gender gender;
| Original | enum순서를 DB에 저장(default) |
| STRING | enum이름을 DB에 저장 |
@Temporal
날짜 타입을 매핑할 때 사용한다.
@Temporal(TemporalType.DATE)
Date regDate;
@Temporal(TemporalType.TIME)
Date regTime;
@Temporal(TemporalType.TIMESTAMP)
Date regTimestamp;
| 속성 | 설명 | 결과값 예시 |
| DATE | 날짜, DB date타입과 매핑 | 2021-07-27 |
| TIME | 시간, DB time타입과 매핑 | 12:30:50 |
| TIMESTAMP | 날짜와 시간 DB timestamp타입과 매핑 | 2021-07-27 12:30:50 |
@Lob
DB BLOB, CLOB타입과 매핑
- 필드 타입이 문자열일 경우(CLOB 매핑)
- 그외 자료형(BLOB 매핑)
@Lob
@Column(name="photo", columnDefinition = "BLOB")
private String photo2;
@Lob
@Column(name="photo", columnDefinition = "CLOB")
private byte[] photo1;
@Transient
해당 어노테이션이 명시된 필드는 DB에 저장하지도 조회하지도 않습니다.
- 객체에 임시로 값을 보관하고 싶을 때 사용한다.
@CreationTimestamp
해당 어노테이션이 명시되면 INSERT 쿼리가 발생할 때, 현재 시간을 자동으로 만들어 저장합니다.
@CreationTimestamp // INSERT 시 자동으로 값을 채워줌
@Column(name = "created_at")
private LocalDateTime createdAt = LocalDateTime.now();
@UpdateTimeStamp
해당 어노테이션이 명시되면 UPDATE쿼리가 발생할 때, 현재 시간을 자동으로 만들어 저장합니다.
@UpdateTimestamp // UPDATE 시 자동으로 값을 채워줌
@Column(name = "updated_at")
private LocalDateTime updatedAt = LocalDateTime.now();
출처: https://velog.io/@c65621/JPA-annotation-%EC%A0%95%EB%A6%AC
JPA annotation 정리
1.@Entity해당 클래스를 테이블과 매핑한다고 JPA에게 알려줍니다.@Entity가 사용된 클래스를 엔티티 클래스라고 합니다.2.@Table엔티티 클래스에 매핑할 테이블 정보를 지정합니다.@Table 어노테이션을
velog.io
출처: https://yoonbing9.tistory.com/19
기본키 매핑 어노테이션 정리 @Id, @GeneratedValue, @SequenceGenerator, @TableGenerator
기본키 매핑은 직접할당과 자동할당 방법으로 나뉜다. @Id 직접할당. 엔티티의 기본키 필드에 값을 직접 넣어 등록한다. @GeneratedValue 자동할당 속성값 설명 대표DBMS strategy = GenerationType.IDENTITY 기
yoonbing9.tistory.com
'Spring' 카테고리의 다른 글
| [Spring JPA] 단방향, 양방향 연관관계 (0) | 2023.04.09 |
|---|---|
| [Spring JPA] 엔티티 설계 (0) | 2023.04.08 |
| [SpringBoot] 검증2-Bean Validation (0) | 2023.04.03 |
| [SpringBoot] 검증1-Validation (0) | 2023.03.30 |
| [SpringBoot] 메시지 국제화 (0) | 2023.03.28 |