복붙노트

[SPRING] Spring Data @CreatedDate 주석이 작동하지 않습니다.

SPRING

Spring Data @CreatedDate 주석이 작동하지 않습니다.

저는 Spring Data를 사용하는 프로젝트에서 일하고 있습니다. 대신 @PreUpdate 또는 @PrePersist 주석을 사용하여 @CreatedDate 주석을 사용하여 creationTime 필드를 채우고 싶습니다 (완벽하게 작동하는 방식으로). @CreatedDate를 사용하여이 작업을 수행하면이 필드가 공백으로 남습니다. postgresql 데이터베이스를 사용합니다. 문서화는별로 도움이되지 않습니다.

내가 어떻게 고칠 수 있니? 고맙습니다!

import org.springframework.data.annotation.CreatedDate;
@Entity
@Table(name = "software")
public class Software implements Serializable {

    // ...

    @Column(name = "creation_time")
    @CreatedDate
    private Date creationTime;
    //...
}

내 applicationContext :

<jpa:repositories base-package="path.to.dao"/>


<context:component-scan base-package="path.to.dao"/>
<context:property-placeholder location="classpath:application.properties"/>


<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${db.driver}"/>
    <property name="url" value="${db.url}"/>
    <property name="username" value="${db.username}"/>
    <property name="password" value="${db.password}"/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="packagesToScan" value="path.to.bean"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter" ref="jpaAdapter"/>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
            <prop key="hibernate.ejb.naming_strategy">${hibernate.ejb.naming_strategy}</prop>
            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
        </props>
    </property>
</bean>

<bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

해결법

  1. ==============================

    1.스프링 데이터 JPA @CreatedDate 주석을 사용하기를 원했던 유사한 상황에 있었을 수도 있지만 문서에서 다르게 설명 된 사용자 레벨 감사는 필요하지 않았습니다.

    스프링 데이터 JPA @CreatedDate 주석을 사용하기를 원했던 유사한 상황에 있었을 수도 있지만 문서에서 다르게 설명 된 사용자 레벨 감사는 필요하지 않았습니다.

    어노테이션 기반 감사가 작동하도록하려면, 그럼에도 불구하고 org.springframework.data.domain.AuditorAware를 구현 한 클래스를 프로젝트에 추가해야했습니다. 구현할 getCurrentAuditor () 메소드에서 반환 된 값을 사용하는 것처럼 보이지 않기 때문에 이것은 이상합니다. 내 방금 null을 반환합니다.

    public class NullAuditorBean implements AuditorAware {
    
        @Override
        public Object getCurrentAuditor() {
            return null;
        }
    }
    

    그런 다음 JPA 감사를 활성화하기 위해 내 applicationContext의 항목에서 "null 객체"AuditorAware 구현을 참조해야했습니다. jpa : repositories를 지정하는 줄 앞에이 작업을 수행했는지 확인해야했습니다. 이 모양은 다음과 같습니다.

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

    또한 orm.xml 파일을 추가해야했으며 형식적으로이를 entityManagerFactory bean의 속성으로 참조해야했습니다.

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

    이 META-INF / orm.xml 항목이 컴파일 출력과 함께 저장되어 있는지 확인하십시오 (내 WAR는 WEB-INF / classes에 있습니다).

    레코드에 대한 orm.xml 파일에는이 관련 질문에 대한 답변에서 찾을 수있는 일부 상용구가 포함되어 있습니다.

    이 일을 할 때 상당한 양의 일이있었습니다. 이전 작업 솔루션을 선호 할 수도 있습니다!

  2. ==============================

    2.이 질문은 꽤 오래되었지만 여전히 관련이 있습니다. 나에게있어서 중요한 것은 문서에서

    이 질문은 꽤 오래되었지만 여전히 관련이 있습니다. 나에게있어서 중요한 것은 문서에서

    예 :

    @Configuration
    @EnableMongoAuditing
    class Config {
    
      /**
       * Optional, depending on your needs
       */
      @Bean
      public AuditorAware<AuditableUser> myAuditorProvider() {
          return new AuditorAwareImpl();
      }
    }
    

    또는 XML에서 :

    <mongo:auditing/>
    
  3. from https://stackoverflow.com/questions/20483841/spring-data-createddate-annotation-doesnt-work-for-me by cc-by-sa and MIT license