[JPA] Spring boot + JPA + Sqlite BaseEntity 만들기

이재훈·2023년 9월 14일
0

삽질모음집

목록 보기
5/8

작성하려는 내용은 제목과 같습니다. BaseEntity를 상속 받은 엔티티들의 생성 시간, 마지막 수정시간을 넣어주려고 합니다.

두 가지 방법이 있습니다.

방법 1

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

    @Column(columnDefinition = "text", updatable = false)
    private String createdDateTime;

    @Column(columnDefinition = "text")
    private String modifiedDateTime;

    @PrePersist
    protected void onCreate() {
        createdDateTime = CommonUtils.LocalDateTimeToString(LocalDateTime.now());
    }

    @PreUpdate
    protected void onUpdate() {
        modifiedDateTime = CommonUtils.LocalDateTimeToString(LocalDateTime.now());
    }
}
@EnableJpaAuditing
@Configuration
public class JpaAuditingConfig {
}
public class CommonUtils {
    public static String LocalDateTimeToString(LocalDateTime localDateTime) {
        return localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
}    

mysql에서는 LocalDateTime을 사용하여 시간을 저장했지만 Sqlite에 LocalDateTime을 사용하면 시간 format이 알아보기 힘들게 저장됩니다.

그래서 위와 같이 String로 저장하는 것이 사람이 이해할 수 있는 format으로 저장됩니다. 이제 시간이 저장되기를 원하는 엔티티에 extends 해주면 끝입니다.

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class someEntity extends BaseEntity{
	// ... 생략
}

방법 2

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

    @CreatedDate
    @Column(columnDefinition = "text", updatable = false)
    private String createdDateTime;

    @LastModifiedDate
    @Column(columnDefinition = "text")
    private String modifiedDateTime;
}

방법 1과는 다른 format으로 자동 저장됩니다.

코드는 간단하지만 몇 시간 삽질을 하게 만든 녀석이네요ㅠ

profile
부족함을 인정하고 노력하자

0개의 댓글