Spring Boot JPA@CreatedDate @LastModifiedDate not being populated when saving the object

后端 未结 4 1176
南笙
南笙 2021-01-17 23:21

I am writing an app with Spring Boot + JPA, using a Postgres database. I have a User Entity and I am trying to get a timestamp when the user record is saved and/or modified.

4条回答
  •  执念已碎
    2021-01-17 23:55

    I had similar issue (Spring Boot 2.2.1 and JUnit5) with null values. Adding @EnableJpaAuditing to test class did not work.

    My example (did not copy everything):

    @Getter(AccessLevel.PROTECTED)
    @Setter(AccessLevel.PROTECTED)
    @MappedSuperclass
    @EntityListeners(AuditingEntityListener.class)
    public class Auditable {
    
        @CreatedBy
        @Column(name = "created_by", nullable = false)
        private U createdBy;
    
        @CreatedDate
        @Column(name = "created", nullable = false)
        private OffsetDateTime created;
    }
    

    and respective class:

    @Getter
    @Setter
    @Entity
    @Table(name="survey_records")
    public class SurveyRecord extends Auditable implements Serializable {
    

    I had following configuration for auditing:

    @Configuration
    @EnableJpaAuditing(auditorAwareRef = "auditorProvider", dateTimeProviderRef = "auditingDateTimeProvider")
    public class JpaAuditingConfiguration {
    
        @Bean(name = "auditingDateTimeProvider")
        public DateTimeProvider dateTimeProvider() {
            return () -> Optional.of(OffsetDateTime.now());
        }
    
        @Bean
        public AuditorAware auditorProvider() {
    

    To get @CreatedBy and @CreatedDate working inside test only @Import was needed

    @DataJpaTest
    @Import(JpaAuditingConfiguration.class)
    class SurveyRecordRepositoryTest {
    

    Used references:

    • https://springbootdev.com/2018/03/13/spring-data-jpa-auditing-with-createdby-createddate-lastmodifiedby-and-lastmodifieddate/

    • https://github.com/spring-projects/spring-boot/issues/10743#issuecomment-416777423

提交回复
热议问题