jpa - 在 spring-data 中使用 @Transactional 正确提交到数据库
问题描述
我有一个测试功能,应该执行以下任务
- 向数据库插入数据
- 查询数据库并验证数据是否符合预期
问题是在我的测试中,数据还没有提交到数据库,就像它卡在某个transactional
步骤中一样,我怎么能确定在执行第二个查询之前提交数据。
这是我的测试功能的一部分,@Rollback(false)
仅用于开发阶段。
@Test
@Rollback(false)
....
reportJobManager.saveOutput(savedDef, pipeline, results, null)
reportJobManager.retryRetention(savedDef, listOf(csvDeliverbale))
保存输出函数。示例代码
@Transactional
fun saveOutput() {
if (deliverable.type.name == "DATA_RETENTION_RESULT") {
finishedPipeline.postProcessors.forEach {
//it(definition, dbDeliverable)
val dbRetention = ReportRetention(
deliverable = dbDeliverable,
definition = definition,
retryCount = 1L
)
val retentionUploadSaved = retentionRepository.save(dbRetention)
if (retentionUploadSaved.id == null) {
throw IllegalStateException("Retention upload was not saved!")
}
}
}
}
retryRetention
功能码
fun retryRetention(definition: ReportDefinition, listOfDeliverables: List<Deliverable>) {
retentionRepository.findAll().forEach {
if (it.state.name == "NOT_UPLOADED" && it.retryCount!!.toInt() < 5) {
if (it.deliverable?.success == true) {
it.state = RetentionUploadStatus.UPLOADED
println("RetentionUploadStatus->UPLOADED")
} else {
val schemaService = SchemaServiceImpl()
val schemas = schemaService.initializeSchemas(definition, emptyMap())
val parameters = definition.parameterPolicy.policy(schemas.parametersSchema)
val delivery = deliveryPolicyService.policy<Deliverable>(ValidDeliveryPolicy.RETENTION_ONLY, schemas.deliverySchema)
val deliveryFunction = delivery.createDeliveryStep()
deliveryFunction(parameters, listOfDeliverables)
it.retryCount = it.retryCount!!.plus(1L)
}
retentionRepository.save(it)
}
}
}
解决方案
如果您有一个saveOutput()
带有@Transactional
注释的方法,则需要在调用事务以实际提交的@Transactional
所有其他方法之上添加。saveOutput()
推荐阅读
- javascript - Javascript SetMonth 问题
- next.js - 滚动到 nextjs 中的部分
- azure - 如何在不创建应用程序的情况下使用图形 API 上传到 onedrive
- php - 用 php 下载 svg
- tensorflow - 为什么在 TensorFlow 模型训练中 keras 比 estimator 慢?
- python - 是否可以使用我的帐户而不是机器人 DM 用户?不和谐
- python - 词义消歧 WordNet
- awk - 使用 awk 删除文本并在 fasta 文件的奇数行中添加字符串
- python - 如何构建像 NSL-KDD 这样的具有相关特征的数据集和实时网络流量?
- angular - 保持属性的持久性和 AngularJS 中的所有组件可访问