출처 :

www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-JPA-%EC%9B%B9%EC%95%B1/dashboard

3. Account 도메인 클래스

Account 도메인에 필요한 데이터

  • 로그인
  • 프로필
  • 알림 설정

Lombok 어노테이션

@Getter @Setter @EqualsAndHashCode(of = "id")

@Builder @AllArgsConstructor @NoArgsConstructor

 

id만 사용하는 이유 => 연관관계가 복잡해질때 @EqualsAndHashCode(of = "id")에서

서로다른 연관관계를 계속해서 순환참조하느라 무한 루프 -> StackOverFlow가 발생할 수 있다.

 

package com.studyolle.domain;

import lombok.*;

import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
@Getter @Setter @EqualsAndHashCode(of = "id")
@Builder @AllArgsConstructor @NoArgsConstructor
public class Account {

    // ---- 로그인 ----

    @Id
    @GeneratedValue
    private Long id;

    @Column(unique = true)  // 로그인 시 유니크 해야 하는 컬럼
    private String email;

    @Column(unique = true)  // 로그인 시 유니크 해야 하는 컬럼
    private String nickname;

    private String password;

    private boolean emailVerified;  // 이메일 인증 절차 -> 이메일 인증 여부 검토하는 컬럼

    private String emailCheckToken; // 이메일 검증시 필요한 토큰값

    private LocalDateTime joinedAt; // 검증 후 가입날짜 설정을 위한 컬럼


    // ---- 프로필 ------
    private String bio; // 자기소개

    private String url; // 웹사이트 url

    private String occupation;  // 직업

    private String location;  // 지역 varchar(255)

    @Lob
    @Basic(fetch = FetchType.EAGER)
    private String profileImage;    // 프로필 이미지

    // varchar(255)보다 클 수 있음 -> Lob을 이용해 text타입으로 매칭
    // fetch타입이 그때 그때 바뀔 수 있기 때문에 명시적으로 선언

    // ---- 알림 설정 ----

    private boolean studyCreatedByEmail;

    private boolean studyCreateByWeb;

    private boolean studyEnrollmentResultByEmail;

    private boolean studyEnrollmentResultByWeb;

    private boolean studyUpdatedByEmail;

    private boolean studyUpdateByWeb;
}