[JPA] 회원 도메인 Entity 생성
@Entity :
- @Entity가 붙은 클래스는 JPA가 관리하는 클래스로, 해당 클래스를 엔티티라고 한다.
- JPA를 사용해서 테이블과 매핑할 클래스는 반드시 @Entity 를 붙여야 한다.
- 기본 생성자 필수 (파라미터 없는 public / protected 생성자)
- final 클래스, enum, interface, inner 클래스는 엔티티로 사용할 수 없다.
- DB에 저장하고 싶은 필드에는 final을 사용할 수 없다.
- @Entity(name="User") entity 명 지정
- 기본으로는 클래스명 그대로 사용함
@Id
- 해당 테이블에서 Primary Key 를 지정한다.
@GeneratedValue(strategy = GenerateType.IDENTITY)
- 컬럼에 지정하는 어노테이션으로 data insert 시 자동으로 생성하는 전략 설정하는 어노테이션이다.
- 자동 생성 전략 종류 4가지
- 1. AUTO : (persistence provider가) 특정 DB에 맞게 자동 선택
- 2. IDENTITY : DB의 identity 컬럼을 이용
- 3. SEQUENCE : DB의 시퀀스 컬럼을 이용
- 4. TABLE : 유일성이 보장된 데이터베이스 테이블을 이용
@PrePersist
- DB insert 시 같이 실행하도록 하는 어노테이션이다.
** 생성자 관련 어노테이션
@NoArgsConstructor | 파라미터가 없는 기본 생성자를 생성 |
@AllArgsConstructor | 모든 필드 값을 파라미터로 받는 생성자를 만듦 |
@RequiredArgsConstructor | final이나 @NonNull인 필드 값만 파라미터로 받는 생성자 만듦 |
package com.cos.photogramstart.domain.user;
import java.time.LocalDateTime;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.PrePersist;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor // 파라미터 없는 기본 생성자
@AllArgsConstructor // 모든 필드값을 받는 생성자
@Data
@Entity // db table 생성
public class User {
@Id //pk 설정
@GeneratedValue(strategy = GenerationType.IDENTITY) // 번호 증가 전략 설정 (연결된 db에 따라 다름)
private int id;
private String username;
private String password;
private String name;
private String email;
private String website;
private String bio; // 자기소개
private String phone;
private String gender; // 성별
private String profileImageUrl; //사진
private String role; //권한
private LocalDateTime createDate;
/**
* data insert 직전에 실행되는 어노테이션
*/
@PrePersist
public void creatTime(){
this.createDate=LocalDateTime.now();
}
}
User user1 = new User(); // @NoArgsConstructor
//User user2 = new User("user2", "1234"); // @RequiredArgsConstructor
User user3 = new User("모든 파라미터"); // @AllArgsConstructor
'DB > JPA' 카테고리의 다른 글
[JPA] query creation 네이밍 규칙 사용하기!(SQL 조회) (0) | 2022.03.16 |
---|---|
[JPA] JpaRepository 인터페이스 - JPA로 CRUD 구현 (0) | 2022.02.16 |
댓글