<Spring Boot> JPA - Column 값을 Default로 설정하기

MinsHouse·2022년 6월 1일
1

SpringBoot로 웹 프로젝트를 진행 중 Default값을 하나하나 넣자니 굳이 이럴 필요가 있을까 해서 자동으로 Default 값을 넣어주는 방법을 모색했다.

Default 값으로 자동으로 넣어주는 방법은

@DynamicInsert
@ColumnDefault

위의 어노테이션을 사용하면 해결이 된다!!!


@DynamicInsert

Default값을 적용하기 위해서는 이 어노테이션을 써야한다. Insert 시 지정된 Default값을 적용시킨다.

@ColumnDefault

ColumnDefault는 Default값 설정을 할 때 사용한다.


Example)

client.java

package com.example.demo.model.client;

import lombok.*;
import javax.persistence.*;
import java.util.Date;
import com.example.demo.model.item.OwnerInfo;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicInsert;


@DynamicInsert //@DynamicInsert사용
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity(name="Client")
public class Client {

    @Id
    @Column(name = "client_index")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer clientIndex;
    @Column(name = "client_id")
    private String clientId;
    @Column
    private String password;
    @Column
    private String email;
    @Column(name = "phone_number")
    private String phoneNumber;
    @Column(name = "client_name")
    private String clientName;
    @Column
    private String nickname;
    @Column(name = "client_photo")
    @ColumnDefault("client.png") //@ColumnDefault사용
    private String clientPhoto;
}

SignupRequestDTO.java

package com.example.demo.model.client;

import com.example.demo.model.contract.ReviewWrite;
import lombok.Data;
import org.springframework.security.crypto.password.PasswordEncoder;

import javax.xml.bind.annotation.XmlType;
import java.sql.Date;

@Data
public class SignupRequestDTO {
    private String clientId;
    private String clientName;
    private String password;
    private String nickname;
    private String email;
    private Date birthdate;
    private String phoneNumber;

    public Client toEntity(PasswordEncoder passwordEncoder) {
        Client client = new Client();
        client.setClientId(clientId);
        client.setPassword(passwordEncoder.encode(password));
        client.setEmail(email);
        client.setPhoneNumber(phoneNumber);
        client.setClientName(clientName);
        client.setNickname(nickname);
        client.setBirthdate(birthdate);

        return client;
    }
}

위의 예는 clientPhoto로 human.png를 자동으로 넣고 싶은 경우인데 @DynamicInsert와 @ColumnDefault를 통해 자동으로 회원가입 시 Default값을 넣어준다.

-> SignupRequestDTO에서 굳이 client.setClientPhoto()를 쓸 필요가 없다!!!!!!

지금은 Default값을 회원가입 시에만 사용하고 있지만 Default값을 많이 사용하는 경우에 코드를 줄일 수 있어서 유용할 것 같다. 👍 😄

profile
MiniBee

0개의 댓글