Hello, Freakin world!

User 엔티티 작성하기 본문

Toy Project/쇼핑몰 만들기 프로젝트

User 엔티티 작성하기

johnna_endure 2020. 7. 4. 17:29

 

이전 글에서 설계한 명세대로 User 엔티티를 작성해보자.

 

User 

package com.springboot.myshop.domain.user;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

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

@Getter
@NoArgsConstructor
@Entity
public class User {

    @Id @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "USER_ID")
    private Long id;

    @Column(nullable = false, unique = true)
    private String email;

    @Column(nullable = false)
    private String password;

    @Embedded
    private Address address;

    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private RoleType roleType;

    @Column(nullable = false)
    private LocalDateTime createdDatetime;

    @Column(nullable = false)
    private LocalDateTime modifiedDatetime;

    @Builder
    public User(String email, String password,
                Address address, RoleType roleType, LocalDateTime createdDatetime, LocalDateTime modifiedDatetime) {
        this.email = email;
        this.password = password;
        this.address = address;
        this.roleType = roleType;
        this.createdDatetime = createdDatetime;
        this.modifiedDatetime = modifiedDatetime;
    }
}

 

id의 자동 생성 전략은 sequece 방식으로 설정했다. 지연 로딩을 적극적으로 활용해볼 계획이기 때문.

(Identity 전략은 엔티티를 영속화 할때 비어있는 id값을 바인딩하기 위해 플러시 하기전에 sql을 실행하기 때문에 지연 로딩을 할 수 없다고 한다.)  

 

email을 비지니스 키로 활용하기 위해 유니크 제약 속성을 true로 설정해 준 것 말고 다른 특이사항은 없는 것 같다. 

 

테이블이 제대로 작성되는지 앱을 실행시켜 보자.

 

Hibernate: drop table if exists user CASCADE 
Hibernate: drop sequence if exists hibernate_sequence
Hibernate: create sequence hibernate_sequence start with 1 increment by 1
Hibernate: create table user (user_id bigint not null, address varchar(255), created_datetime timestamp not null, email varchar(255) not null, modified_datetime timestamp not null, password varchar(255) not null, role_type varchar(255) not null, primary key (user_id))
Hibernate: alter table user add constraint UK_ob8kqyqqgmefl0aco34akdtpe unique (email)

별다른 에러없이 ddl(data definition language) 실행에 성공!

 

나머지 필드 객체들

 

RoleType

package com.springboot.myshop.domain.user;

public enum RoleType {
    GUEST, MEMBER, ADMIN;
}

 

Address(공공 API 확인 전까지 임시 클래스)

package com.springboot.myshop.domain.user;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

import javax.persistence.Embeddable;

@Getter
@RequiredArgsConstructor
@Embeddable
public class Address {
    private final String address;
}

 

이제 이 엔티티를 바탕으로 회원 기능들을 구현할 차례다.

 

Comments