繁体   English   中英

Spring 启动 - 实体:如何添加 CreatedDate(UTC 时区感知)、LastModifiedDate(UTC 时区感知)、CreatedBy、LastModifiedBy

[英]Spring boot - Entity : How to add CreatedDate (UTC timezone aware), LastModifiedDate (UTC timezone aware), CreatedBy, LastModifiedBy

我是 Spring 引导的新手。 我打算使用 postgresql 数据库。 我正在使用 spring 数据 JPA

在这个实体中,我需要添加这些字段

@Entity
@Table(name="STUDENT")
public class Student {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    
    @Column(name="STUDENT_NAME", length=50, nullable=false, unique=false)
    private String name;

    Here i want to add
    createdby, modifiedby <--
   
    createdat, modifiedat <-- (i want them to be timezone aware)
    
    // other fields, getters and setters
}

我怎样才能做到这一点。

我来自 django 背景,我们只是在那里

class Student(models.Model):

   ... other fields
   created_at = models.DateTimeField(auto_now_add=True)
   updated_at = models.DateTimeField(auto_now=True)
   created_by = models.ForeignKey(User,related_name="%(app_label)s_%(class)s_created_by",on_delete=models.CASCADE)

您可以使用@PrePersist@PreUpdate方法。 例如:

@Entity
public class SomeEntity {

    //..other properties..//

    private LocalDateTime createDate;
    private LocalDateTime modifyDate;
    private String createdBy;
    private String modifiedBy;

    @PrePersist
    private void beforeSaving() {
        createDate = LocalDateTime.now();
        createdBy = Thread.currentThread().getName(); //todo: put your logic here
    }

    @PreUpdate
    private void beforeUpdating() {
        modifyDate = LocalDateTime.now();
        modifiedBy = Thread.currentThread().getName(); //todo: put your logic here
    }
}

此外,如果您想在所有实体中使用此类方法,您可以创建BaseEntity并在其他类中扩展它,例如:

@MappedSuperclass
public class BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private LocalDateTime createDate;
    private LocalDateTime modifyDate;
    private String createdBy;
    private String modifiedBy;

    @PrePersist
    private void beforeSaving() {
        createDate = LocalDateTime.now();
        createdBy = Thread.currentThread().getName(); //todo: put your logic here
    }

    @PreUpdate
    private void beforeUpdating() {
        modifyDate = LocalDateTime.now();
        modifiedBy = Thread.currentThread().getName(); //todo: put your logic here
    }

    //..getters/setters omitted..//
}

@Entity
public class SomeEntity extends BaseEntity{
    //..other properties..//
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM