Saving the creation/modification timestamp of database records plays vital role in production applications. That helps in diagnosing issues and events.

If you're using Spring Data JPA, it's not a big deal. It's officially documented here. Below are the precise steps.

1) Add/edit orm.xml

Create orm.xml (at src/main/resources/META-INF/orm.xml) if you don't already have it. Then, add auditing configuration to it, looking as below:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings
    xmlns="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
    version="2.0">
    <description>JPA</description>
    <persistence-unit-metadata>
        <persistence-unit-defaults>
            <entity-listeners>
                <entity-listener class="org.springframework.data.jpa.domain.support.AuditingEntityListener"/>
            </entity-listeners>
        </persistence-unit-defaults>
    </persistence-unit-metadata>
</entity-mappings>

2) Annotate one of your configuration classes with @EnableJpaAuditing

For example

@SpringBootApplication
@EnableJpaAuditing
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

3) Add annotated fields to entity classes

Example:

@Entity
public class Car {
    ...
    @CreatedBy
    private Integer createdById;
    @CreatedDate
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;
    @LastModifiedBy
    private Integer lastModifiedById;
    @LastModifiedDate
    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;
    ...

Of course, you can create a super class containing all above fields. Don't forget to annotate that with @MappedSuperclass.

4) Configure an AuditorAware bean

Spring Data JPA will need you to provide an AuditorAware bean, which is used for getting the logged in user ID. An implementation can look as below:

@Component
public class MyAuditorAware implements AuditorAware<Integer> {
     @Override
    public Optional<Integer> currentUser() {        
        // return current user ID
    }    
}

That's all you need to store auditing information in your entities!