Spring Data @CreatedDate注释对我不起作用

ali*_*jab 13 java postgresql spring jpa spring-mvc

我正在研究使用Spring Data的项目.我想creationTime使用@CreatedDate注释来填充字段,而不是使用方法@PreUpdate@PrePersist注释(以这种方式完美地工作).当我这样做时,@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;
    //...
}
Run Code Online (Sandbox Code Playgroud)

我的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>
Run Code Online (Sandbox Code Playgroud)

小智 13

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

为了使基于注释的审计工作,我不得不在我实现的项目中添加一个类org.springframework.data.domain.AuditorAware.这很奇怪,因为你实际上似乎并没有使用getCurrentAuditor()你将要实现的方法返回的值; 我的回报null.

public class NullAuditorBean implements AuditorAware {

    @Override
    public Object getCurrentAuditor() {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我需要AuditorAware在我的一个条目中引用我的"null对象" 实现applicationContext来激活JPA审计.我必须确保在指定之前的行之前执行此操作jpa:repositories.这看起来像:

<bean id="auditorBean" class="your.package.subbed.here.NullAuditorBean"/>
<jpa:auditing auditor-aware-ref="auditorBean"/>
Run Code Online (Sandbox Code Playgroud)

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

<property name="mappingResources">
    <value>META-INF/orm.xml</value>
</property>
Run Code Online (Sandbox Code Playgroud)

确保META-INF/orm.xml此条目与您的编译输出一起存储(我的WAR在我的WAR下WEB-INF/classes.

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

当我开始工作时,这是相当多的工作.您可能更喜欢以前的工作解决方案!

  • 对于基于annonation的配置.你可以添加@EnableJpaAuditing("nullAuditorBean") (5认同)