Example 1. AuditorAwareImpl
This is a very simple example that just returns a static value.
Note | |
---|---|
If Spring Security was setup, the method could return the current user. return SecurityContextHolder.getContext().getAuthentication().getName(); |
public class AuditorAwareImpl implements AuditorAware<String> { @Override public String getCurrentAuditor() { return "SYSTEM"; } }
Example 2. AbstractAuditableEntity
This auditing class extends Spring Data JPA's
AbstractPersistable
, which has an auto-increment primary key field in it and some utility methods.
The Auditable
interface uses generics to take the user and it's primary key type.
Note | |
---|---|
If the reference of
Notice the |
@MappedSuperclass @SuppressWarnings("serial") public class AbstractAuditableEntity extends AbstractPersistable<Integer> implements Auditable<String, Integer> { private DateTime lastUpdated; private String lastUpdateUser; private DateTime created; private String createUser; /** * Gets created by audit user. */ @Override public String getCreatedBy() { return createUser; } /** * Sets created by audit user. */ @Override public void setCreatedBy(String createdBy) { this.createUser = createdBy; } /** * Gets create audit date. */ @Override public DateTime getCreatedDate() { return created; } /** * Sets create audit date. */ @Override public void setCreatedDate(DateTime creationDate) { this.created = creationDate; } /** * Gets last modified by audit user. */ @Override public String getLastModifiedBy() { return lastUpdateUser; } /** * Sets last modified by audit user. */ @Override public void setLastModifiedBy(String lastModifiedBy) { this.lastUpdateUser = lastModifiedBy; } /** * Gets last modified audit date. */ @Override public DateTime getLastModifiedDate() { return lastUpdated; } /** * Sets last modified audit date. */ @Override public void setLastModifiedDate(DateTime lastModifiedDate) { this.lastUpdated = lastModifiedDate; } }
Example 3. Excerpt from Person
The Person
class extends AbstractAuditableEntity
.
By doing that it gets a primary key and audit fields, along with getters/setters
for the inherited fields, equals
, and hashCode
.
Only the fields that are specific to this type need to be defined.
@Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name="TYPE", discriminatorType=DiscriminatorType.INTEGER) public class Person extends AbstractAuditableEntity { private static final long serialVersionUID = -2175150694352541150L; private String firstName = null; private String lastName = null; @OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL) @JoinColumn(name="PERSON_ID", nullable=false) private Set<Address> addresses = null; ... }