본문 바로가기

[JPA] 회원 도메인 Entity 생성

인포꿀팁 발행일 : 2022-02-13

@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

댓글