gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:57:24 28 4
gpt4 key购买 nike

我正在开发使用 Spring Data 的项目。我想使用 @CreatedDate 注释来填充 creationTime 字段,而不是使用带有 @PreUpdate@PrePersist 注释的方法(这样做可以完美地工作)。当我使用 @CreatedDate 执行此操作时,它只会将此字段留空。我使用 postgresql 数据库。 Documentation不是很有帮助。

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

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;
}
}

然后我需要在 applicationContext 的条目中引用我的“空对象”AuditorAware 实现来激活 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 条目与您的编译输出一起存储(我的位于 WEB-INF/classes 下的我的 WAR 中。

那个 orm.xml 文件,作为记录,包含一些样板,可以在 this related question 的答案中找到。 .

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

关于java - Spring Data @CreatedDate 注释对我不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20483841/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com