필드와 컬럼 매핑
@Entity
@Getter
@Setter
@NoArgsConstructor
@SequenceGenerator(name="member_seq_generator",sequenceName = "member_seq", initialValue = 1, allocationSize = 50)
public class Member {
/*
* << @GeneratedValue >>
* 기본키 생성을 데이터베이스에 위임. 세가지 전략이 있음
*
* - IDENTITY
* 데이터베이스에 전략을 위임. MySQL의 경우 Auto_Increment. persist()시 바로 Insert, 그 이후에만 ID값을 알 수 있음
*
* - Sequance -> 이걸로 전략 만들어서 사용할 것!
* 시퀀스 객체를 생성에 기본키값을 받아 세팅. 시퀀스 전략을 개발자가 설정할 수 있음
*
* - AUTO
* 디폴트 값. 디비 방언에 따라 자동으로 생성
* */
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "member_seq_generator")
private Long id;
/*
* << @Column >>
* name: 데이터베이스에 매핑될 테이블 컬럼의 이름
* insertable, updatable: 어플리케이션 레벨에서 인설트하 업데이트 가능 불가
* nullable: null 값의 허용여부 결정
* unique: UNIQUE 제약조건 설정(잘쓰지않음, 보통 @Table 을 통해 클래스 레벨로 제약조건 적용)
* columnDefinition: 직접 컬럼 정보를 줄수 있음
* length: String 타입에만 사용, 타입의 길이를 줄 수 있음 ex) length = 10 -> varchar(10)
* */
@Column(name = "name")
private String username;
private Integer age;
/*
* << @Enumerated >>
* 무조건 EnumType.String 옵션으로 사용!
* ORDINAL 로 할 경우 디비에 정수로 저장, Enum의 변경이 있으면 의미가 달라지므로 STRING 으로만 구현!
* */
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP) //DATE, TIME, TIMESTAMP
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
//이렇게만 써도됨 과거에 @Temporal 썼음
private LocalDateTime localDateTime;
/*
* @Lob - 매핑하는 필드 타입이 문자면(String,char[],Clob 등) CLOB 매핑, 나머지는 BLOB 매핑
*
* BLOB - 이진 대형 객체 (Binary), 이미지, 동영상, MP3 등...
* CLOB - 문자 대형 객체 (Character), Oracle Server는 CLOB과 VARCHAR2 사이에 암시적 변환을 수행
* */
@Lob
private String description;
//데이터베이스에 매핑되지않고 메모리에서만 필요한 데이터 설정
@Transient
private int temp;
}
- @GeneratedValue 는 SEQUNCE를 쓸 것
identity는 Auto_Increment 처럼 데이터베이스에 위임 persist() 호출할 때마다 네트워크발생, 아이디를 디비에서 받아올 때 까지 알 수 없음
- Enum 은 String Type으로 설정
ORDINAL로 할 경우 디비에 정수로 저장, 변경이 있으면 의미가 달라질 수 있다
'TIL' 카테고리의 다른 글
[TIL 2022-2-20] JPA 연관관계 매핑, 프로그래머스 (0) | 2022.02.21 |
---|---|
[TIL 2022-2-15]JPA 양방향 매핑 (0) | 2022.02.15 |
[TIL 2022-2-11] JPA 영속성 콘텍스트(Persistence Context) (0) | 2022.02.11 |
[TIL 2022-2-10]JPA 기본, 피보나치 (0) | 2022.02.10 |
[TIL 2022-2-8] HTTP 헤더 공부 (0) | 2022.02.08 |