程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了保存对象时未填充Spring Boot JPA @ CreatedDate @LastModifiedDate大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决保存对象时未填充Spring Boot JPA @ CreatedDate @LastModifiedDate?

开发过程中遇到保存对象时未填充Spring Boot JPA @ CreatedDate @LastModifiedDate的问题如何解决?下面主要结合日常开发的经验,给出你关于保存对象时未填充Spring Boot JPA @ CreatedDate @LastModifiedDate的解决方法建议,希望对你解决保存对象时未填充Spring Boot JPA @ CreatedDate @LastModifiedDate有所启发或帮助;

@PrePersist@Preupdate阶段调用AudiTingEntityListener方法。

这意味着它们将在执行插入或更新sql语句之前被调用。

在Hibernate文档中了解有关JPA事件的更多信息:https ://docs.jboss.org/hibernate/orm/5.2/userguIDe/HTML_single/Hibernate_user_GuIDe.HTML#events- jpa- callBACks

在测试中使用时,您还必须在测试中启用审核

@DataJpaTest
@RunWith(springrunner.class)
@EnableJpaAudiTing
public class EntityListenerTest {

解决方法

我正在使用PostgreS数据库使用Spring Boot +
JPA编写应用程序。我有一个用户实体,正在尝试获取保存和/或修改用户记录时的时间戳。这是行不通的。正在保存的记录的createdDate和lastModifiedDate都为“
null”。

这是Kotlin中的所有相关代码:

@Entity
@Table(name = "app_user")
@EntityListeners(AudiTingEntityListener::class)
data class User(
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @column(name = "id")
        val id: UUID? = null,@NotNull
        @column(unique = truE)
        val email: String,val name: String,private val @R_772_5747@d: String,@CreatedDate
        @column(name = "created_date",nullable = false,updatable = falsE)
        var createdDate: LocaldatetiR_205_11845@e? = null,@LastModifiedDate
        @column(name = "last_modified_date",nullable = falsE)
        var lastModifiedDate: LocaldatetiR_205_11845@e? = null
)

我添加日期字段的SQL查询如下所示:

alter table app_user
ADD columN last_modified_date TIMESTAMP,ADD columN created_date TIMESTAMP;

我也有一个配置类

@Configuration
@EnableJpaAudiTing(auditorAwareRef = "auditorProvider")
class JpaAudiTingConfiguration {

    @Bean
    fun auditorProvider(): AuditorAware<String> {
        return AuditorAware { Optional.of(SecurityContextHolder.getContext().authentication.Name) }
    }

}

我的测试课:

  @Autowired
    private lateinit var userRepository: UserRepository

    val user = User(
            email = "email",name = "name",@R_772_5747@d = "@R_772_5747@d"
    )

    @Test
    fun `it sets the timestamps when a user is created`() {
        userRepository.save(user)
        user.let {
            assertThat(it.createdDatE).isnotNull()
            assertThat(it.lastModifiedDatE).isnotNull()
        }
    }

更新:

看来问题只发生在测试中。当我在开发环境而不是测试中执行相同的代码来@R_587_10589@时,这似乎很好。

测试中是否需要一些其他配置?

更新2

我也尝试使用实体管理器,如下所示:

@Autowired
lateinit var entitymanager: TestEntitymanager

然后在测试中执行以下操作:

entitymanager.persist(user)
entitymanager.flush()

并且

entitymanager.persistAndFlush(user)

仍然没有填充时间戳。

大佬总结

以上是大佬教程为你收集整理的保存对象时未填充Spring Boot JPA @ CreatedDate @LastModifiedDate全部内容,希望文章能够帮你解决保存对象时未填充Spring Boot JPA @ CreatedDate @LastModifiedDate所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。