created_at 컬럼에 ID가 자동으로 생성되는 것처럼 생성 날짜/시간을 자동으로 생성하도록 하려면 어떻게 해야 합니까?
현재 아래와 같은 엔티티가 있습니다.
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long productId;
private String productImage;
private String productTitle;
private String productDescription;
private Integer productPrice;
private Date createdAt;
private Date updatedAt;
이 개체를 만들 때 createdAt 및 updatedAt 값이 데이터베이스에 null로 표시되며 createdAt 및 updateAt가 자동으로 삽입되도록 코드를 구현하는 방법을 알고 싶습니다.
제 투고 방법은 다음과 같습니다.
@PostMapping("/products")
public ProductResponse createProduct(@Validated @RequestBody ProductForm productForm) {
Product product = productForm.asProduct();
Product createdProduct = productRepository.save(product);
return new ProductResponse(createdProduct, "Product created");
}
JPA
타임스탬프 필드에 직접 주석을 다는 것만큼 편리한 방법은 없지만@PrePersist
,@PreUpdate
주석과 약간의 노력으로 동일한 결과를 얻을 수 있습니다.
휴지 상태
스프링 데이터 JPA
엔티티에서 다음 추상 클래스를 확장합니다.
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class DateAudit implements Serializable {
@CreatedDate
@Column(name = "created_at", nullable = false, updatable = false)
private Date createdAt;
@LastModifiedDate
@Column(name = "updated_at")
private LocalDateTime updatedAt;
}
JPA 감사 기능을 유효하게 하는 것을 잊지 말아 주세요.@EnableJpaAuditing
자세한 내용은 https://docs.spring.io/spring-data/jpa/docs/1.7.0.DATAJPA-580-SNAPSHOT/reference/html/auditing.html를 참조해 주세요.
@dimitrisli와 @buddha의 답변이 뒤섞여 있어 꽤 깨끗한 것은
@Data
@MappedSuperclass
public abstract class BaseEntity {
@Column(updatable = false)
@CreationTimestamp
private LocalDateTime createdAt;
@UpdateTimestamp
private LocalDateTime updatedAt;
}
그리고 이제 너희 모두 그렇게 수업을 확장할 수 있어
@Data
@Entity
@EqualsAndHashCode(callSuper = true)
public class User extends BaseEntity {
@Id
@GeneratedValue
public UUID id;
public String userName;
public String email;
public String firstName;
public String lastName;
}
lombok에서 getter/setter를 생성하기 때문에 @Data & @EqualsAndHashCodeannotation 주석이 필요하지 않을 수 있습니다.
BaseEntity를 작성할 수 있습니다.각 엔티티는 BaseEntity를 확장합니다.기본 엔티티에서는 시간을 자동으로 설정합니다.
@Data
@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class BaseEntity implements Serializable {
@Id
@Column(name = "Id")
private String id;
@Column(name = "deleted", columnDefinition = "Bit(1) default false")
private boolean deleted = false;
@Column(name = "DataChange_CreatedBy", nullable = false)
private String dataChangeCreatedBy;
@Column(name = "DataChange_CreatedTime", nullable = false)
private Date dataChangeCreatedTime;
@Column(name = "DataChange_LastModifiedBy")
private String dataChangeLastModifiedBy;
@Column(name = "DataChange_LastTime")
private Date dataChangeLastModifiedTime;
@PrePersist
protected void prePersist() {
if (this.dataChangeCreatedTime == null) dataChangeCreatedTime = new Date();
if (this.dataChangeLastModifiedTime == null) dataChangeLastModifiedTime = new Date();
}
@PreUpdate
protected void preUpdate() {
this.dataChangeLastModifiedTime = new Date();
}
@PreRemove
protected void preRemove() {
this.dataChangeLastModifiedTime = new Date();
}
}
언급URL : https://stackoverflow.com/questions/49954812/how-can-you-make-a-created-at-column-generate-the-creation-date-time-automatical
'programing' 카테고리의 다른 글
Form Data와 jQuery#serialize()의 차이점 (0) | 2023.02.28 |
---|---|
Gatsby JS, Restful API에서 데이터 가져오기 (0) | 2023.02.28 |
체크박스 이벤트핸들러의 'MouseEvent'가 범용이 아닌 이유는 무엇입니까? (0) | 2023.02.28 |
Angular를 사용하여 파일을 다운로드하려면 어떻게 해야 합니까?JS 또는 Javascript? (0) | 2023.02.28 |
오류의 적절한 사용 (0) | 2023.02.28 |