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.
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