sql >> Base de Datos >  >> RDS >> PostgreSQL

La anotación Spring Data @CreatedDate no funciona para mí

Es posible que haya estado en una situación similar en la que quería Spring Data JPA @CreatedDate anotación para trabajar, pero no necesitaba la auditoría a nivel de usuario que se describe en su documentación.

Para que la auditoría basada en anotaciones funcionara, tuve que agregar una clase a mi proyecto que implementara org.springframework.data.domain.AuditorAware . Esto es extraño porque en realidad no parece usar el valor devuelto por getCurrentAuditor() método que implementará; el mío simplemente devuelve null .

public class NullAuditorBean implements AuditorAware {

    @Override
    public Object getCurrentAuditor() {
        return null;
    }
}

Luego necesitaba hacer referencia a mi "objeto nulo" AuditorAware implementación en una entrada en mi applicationContext para activar la auditoría JPA. Tenía que asegurarme de hacer esto antes de la línea que especifica jpa:repositories . Esto se parece a:

<bean id="auditorBean" class="your.package.subbed.here.NullAuditorBean"/>
<jpa:auditing auditor-aware-ref="auditorBean"/>

También tuve que agregar un orm.xml y necesitaba hacer referencia formal a él como una propiedad de mi entityManagerFactory frijol, así:

<property name="mappingResources">
    <value>META-INF/orm.xml</value>
</property>

Asegúrese de que este META-INF/orm.xml la entrada se almacena con su salida de compilación (la mía está en mi WAR en WEB-INF/classes .

Ese orm.xml archivo, para que conste, contenía algunos repetitivos, que se pueden encontrar en la respuesta a esta pregunta relacionada.

Fue una buena cantidad de trabajo cuando conseguí que esto funcionara. ¡Es posible que prefiera su solución de trabajo anterior!