JPA LocalDate default value 설정

만들고 있는 로직에, 환자를 추가할 때 lastVisit을 입력하지 않으면, default value로 오늘 날짜가 추가되도록 구현을 원한다.

1. @Generated 사용


import org.hibernate.annotations.Generated;
import org.hibernate.annotations.GenerationTime;
 ~
 ~
   @Generated(GenerationTime.INSERT)
   @Column
   private LocalDate lastVisit;

hibernate의 Generated 어노테이션을 사용하면, 된다고 하지만 안됨.

2.

    @Column(nullable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
    private LocalDate lastVisit;

null값이 들어왔다고 오류가 생성된다.

3. 정적 팩토리 메소드 내부에서

public static Patient createPatient(PatientRequestDTO patientDTO) {
        if(patientDTO.getLastVisit() == null) {
            return Patient.builder()
                    .pId(patientDTO.getPId())
                    .name(patientDTO.getName())
                    .sex(patientDTO.getSex())
                    .phone(patientDTO.getPhone())
                    .firstVisit(patientDTO.getFirstVisit())
                    .lastVisit(LocalDate.now())
                    .birthday(patientDTO.getBirthday())
                    .memo(patientDTO.getMemo())
                    .build();
        }
        return Patient.builder()
                .pId(patientDTO.getPId())
                .name(patientDTO.getName())
                .sex(patientDTO.getSex())
                .phone(patientDTO.getPhone())
                .firstVisit(patientDTO.getFirstVisit())
                .lastVisit(patientDTO.getLastVisit())
                .birthday(patientDTO.getBirthday())
                .memo(patientDTO.getMemo())
                .build();
    }

만약, 오늘 날짜만 받는 경우만 있다면 간단하게 리턴해주면 되지만
이전에 등록하지 않았던 환자 정보를 추가하는 작업이 있다면 마지막 방문일자를 직접 입력해야하는 상황도 발생한다. 그래서 어쩔 수 없이 분기 처리로 해결했지만, 아무리 봐도 저 코드는 아닌 것 같다ㅠㅠㅠㅠ

좋은 웹페이지 즐겨찾기