春季数据@CreatedDate注释对我不起作用

2022-09-03 02:22:02

我正在从事使用Spring Data的项目。我想使用注释而不是使用方法或注释来填写字段(以这种方式完美地工作)。当我使用它时,只需将此字段留空即可。我使用postgresql数据库。文档不是很有帮助。creationTime@CreatedDate@PreUpdate@PrePersist@CreatedDate

你知道我该如何解决它吗?谢谢!

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

我可能处于类似的情况,我希望Spring Data JPA注释能够正常工作,但不需要用户级审计,而用户级审计在他们的文档中另有描述。@CreatedDate

为了让基于注释的审计工作正常工作,我仍然必须向我的项目添加一个实现 .这很奇怪,因为您实际上似乎没有使用从将要实现的方法返回的值;我的只是回来了。org.springframework.data.domain.AuditorAwaregetCurrentAuditor()null

public class NullAuditorBean implements AuditorAware {

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

然后,我需要在 my 的条目中引用我的“空对象”实现,以激活 JPA 审计。我必须确保在指定 .这看起来像这样:AuditorAwareapplicationContextjpa:repositories

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

我还必须添加一个文件,并且需要正式引用它作为我的bean的属性,如下所示:orm.xmlentityManagerFactory

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

确保此条目与您的编译输出一起存储(我的条目位于 我的 WAR 中,META-INF/orm.xmlWEB-INF/classes

为了记录在案,该文件包含一些样板,可以在此相关问题的答案中找到。orm.xml

当我得到这个工作时,这是相当多的工作。您可能更喜欢以前的工作解决方案!


答案 2

这个问题已经很老了,但仍然相关。对我来说,关键是这个,从文档中可以看出

由于Spring Data MongoDB 1.4审计可以通过使用@EnableMongoAuditing注释来注释配置类来启用。

例如:

@Configuration
@EnableMongoAuditing
class Config {

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

或者,在 XML 中:

<mongo:auditing/>

推荐