작성하려는 내용은 제목과 같습니다. BaseEntity를 상속 받은 엔티티들의 생성 시간, 마지막 수정시간을 넣어주려고 합니다.
두 가지 방법이 있습니다.
@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{
// ... 생략
}
@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으로 자동 저장됩니다.
코드는 간단하지만 몇 시간 삽질을 하게 만든 녀석이네요ㅠ