Spring Data @CreatedDate注释对我不起作用
我正在使用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;
//...
}
我的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>
回答:
我可能曾经在类似的情况下希望Spring Data JPA
@CreatedDate
批注能够正常工作,但不需要用户级别的审核,而在他们的文档中对此进行了描述。
为了使基于注释的审核工作正常进行,我仍然必须向实现的项目中添加一个类org.springframework.data.domain.AuditorAware
。这很奇怪,因为您似乎实际上并没有使用getCurrentAuditor()
将要实现的方法返回的值。我才回来null
。
public class NullAuditorBean implements AuditorAware { @Override
public Object getCurrentAuditor() {
return null;
}
}
然后,我需要AuditorAware
在我的条目中引用我的“空对象”
实现,applicationContext
以激活JPA审核。我必须确保在指定的行之前执行了此操作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
。
当我得到这项工作时,这是一笔相当多的工作。您可能更喜欢以前的工作解决方案!
以上是 Spring Data @CreatedDate注释对我不起作用 的全部内容, 来源链接: utcz.com/qa/430386.html