大佬教程收集整理的这篇文章主要介绍了保存对象时未填充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”。
@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,请注明来意。