/*
 * Copyright 2008-2020 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.data.jpa.domain.support;

import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;

import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.data.auditing.AuditingHandler;
import org.springframework.data.domain.Auditable;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;

JPA entity listener to capture auditing information on persiting and updating entities. To get this one flying be sure you configure it as entity listener in your orm.xml as follows:
<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>
After that it's just a matter of activating auditing in your Spring config:
@Configuration
@EnableJpaAuditing
class ApplicationConfig {
}
<jpa:auditing auditor-aware-ref="yourAuditorAwarebean" />
Author:Oliver Gierke, Thomas Darimont, Christoph Strobl, Mark Paluch
/** * JPA entity listener to capture auditing information on persiting and updating entities. To get this one flying be * sure you configure it as entity listener in your {@code orm.xml} as follows: * * <pre> * &lt;persistence-unit-metadata&gt; * &lt;persistence-unit-defaults&gt; * &lt;entity-listeners&gt; * &lt;entity-listener class="org.springframework.data.jpa.domain.support.AuditingEntityListener" /&gt; * &lt;/entity-listeners&gt; * &lt;/persistence-unit-defaults&gt; * &lt;/persistence-unit-metadata&gt; * </pre> * * After that it's just a matter of activating auditing in your Spring config: * * <pre> * &#064;Configuration * &#064;EnableJpaAuditing * class ApplicationConfig { * * } * </pre> * * <pre> * &lt;jpa:auditing auditor-aware-ref="yourAuditorAwarebean" /&gt; * </pre> * * @author Oliver Gierke * @author Thomas Darimont * @author Christoph Strobl * @author Mark Paluch */
@Configurable public class AuditingEntityListener { private @Nullable ObjectFactory<AuditingHandler> handler;
Configures the AuditingHandler to be used to set the current auditor on the domain types touched.
Params:
  • auditingHandler – must not be null.
/** * Configures the {@link AuditingHandler} to be used to set the current auditor on the domain types touched. * * @param auditingHandler must not be {@literal null}. */
public void setAuditingHandler(ObjectFactory<AuditingHandler> auditingHandler) { Assert.notNull(auditingHandler, "AuditingHandler must not be null!"); this.handler = auditingHandler; }
Sets modification and creation date and auditor on the target object in case it implements Auditable on persist events.
Params:
  • target –
/** * Sets modification and creation date and auditor on the target object in case it implements {@link Auditable} on * persist events. * * @param target */
@PrePersist public void touchForCreate(Object target) { Assert.notNull(target, "Entity must not be null!"); if (handler != null) { AuditingHandler object = handler.getObject(); if (object != null) { object.markCreated(target); } } }
Sets modification and creation date and auditor on the target object in case it implements Auditable on update events.
Params:
  • target –
/** * Sets modification and creation date and auditor on the target object in case it implements {@link Auditable} on * update events. * * @param target */
@PreUpdate public void touchForUpdate(Object target) { Assert.notNull(target, "Entity must not be null!"); if (handler != null) { AuditingHandler object = handler.getObject(); if (object != null) { object.markModified(target); } } } }