From ffeea821f3ea1161353f0e2b48cd9810c78d4ac8 Mon Sep 17 00:00:00 2001 From: Jan-Niclas Struewer <j.n.struewer@gmail.com> Date: Thu, 21 Nov 2024 19:50:09 +0100 Subject: [PATCH] fix: changed lock type to optimistic and added necessary version database field to all entities --- .../kotlin/de/fraunhofer/iem/app/kpi/entity/KPIEntity.kt | 2 ++ .../iem/app/repository/entity/RepositoryEntity.kt | 2 ++ .../iem/app/repository/repository/RepositoryRepository.kt | 7 +++---- .../kotlin/de/fraunhofer/iem/app/tool/entity/ToolEntity.kt | 2 ++ .../fraunhofer/iem/app/tool/repository/ToolRepository.kt | 2 +- .../de/fraunhofer/iem/app/toolRun/entity/LanguageEntity.kt | 2 ++ .../de/fraunhofer/iem/app/toolRun/entity/ToolRunEntity.kt | 2 ++ .../iem/app/toolRun/repository/ToolRunRepository.kt | 2 +- 8 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/de/fraunhofer/iem/app/kpi/entity/KPIEntity.kt b/src/main/kotlin/de/fraunhofer/iem/app/kpi/entity/KPIEntity.kt index d109539e..afe10328 100644 --- a/src/main/kotlin/de/fraunhofer/iem/app/kpi/entity/KPIEntity.kt +++ b/src/main/kotlin/de/fraunhofer/iem/app/kpi/entity/KPIEntity.kt @@ -25,6 +25,8 @@ class KPIEntity( @CurrentTimestamp(event = [EventType.INSERT]) @Column(name = "timestamp") var createdAt: Timestamp? = null, + // Add a version field for optimistic locking + @Version @Column(name = "version", nullable = false) var version: Long? = null, ) { fun toRawValueKpi(): RawValueKpi? { return try { diff --git a/src/main/kotlin/de/fraunhofer/iem/app/repository/entity/RepositoryEntity.kt b/src/main/kotlin/de/fraunhofer/iem/app/repository/entity/RepositoryEntity.kt index bedaefde..de6f3b4a 100644 --- a/src/main/kotlin/de/fraunhofer/iem/app/repository/entity/RepositoryEntity.kt +++ b/src/main/kotlin/de/fraunhofer/iem/app/repository/entity/RepositoryEntity.kt @@ -26,6 +26,8 @@ class RepositoryEntity( var visualizationConsent: Boolean = false, @CurrentTimestamp(event = [EventType.INSERT]) var createdAt: Instant? = null, @UpdateTimestamp var lastUpdatedAt: Instant? = null, + // Add a version field for optimistic locking + @Version @Column(name = "version", nullable = false) var version: Long? = null, ) { fun getLastToolRun(): ToolRunEntity { return toolRuns.first() diff --git a/src/main/kotlin/de/fraunhofer/iem/app/repository/repository/RepositoryRepository.kt b/src/main/kotlin/de/fraunhofer/iem/app/repository/repository/RepositoryRepository.kt index c151eaf1..e4a61bed 100644 --- a/src/main/kotlin/de/fraunhofer/iem/app/repository/repository/RepositoryRepository.kt +++ b/src/main/kotlin/de/fraunhofer/iem/app/repository/repository/RepositoryRepository.kt @@ -13,11 +13,10 @@ import org.springframework.transaction.annotation.Transactional @Transactional(propagation = MANDATORY) interface RepositoryRepository : JpaRepository<RepositoryEntity, UUID> { - @Lock(LockModeType.PESSIMISTIC_READ) fun findByProjectId(projectId: Long): RepositoryEntity? + @Lock(LockModeType.OPTIMISTIC) fun findByProjectId(projectId: Long): RepositoryEntity? - @Lock(LockModeType.PESSIMISTIC_READ) - fun findByVisualizationConsentTrue(): List<RepositoryEntity> + @Lock(LockModeType.OPTIMISTIC) fun findByVisualizationConsentTrue(): List<RepositoryEntity> - @Lock(LockModeType.PESSIMISTIC_READ) + @Lock(LockModeType.OPTIMISTIC) fun findByProjectIdAndVisualizationConsentTrue(projectId: Long): RepositoryEntity? } diff --git a/src/main/kotlin/de/fraunhofer/iem/app/tool/entity/ToolEntity.kt b/src/main/kotlin/de/fraunhofer/iem/app/tool/entity/ToolEntity.kt index 426224a6..113c6230 100644 --- a/src/main/kotlin/de/fraunhofer/iem/app/tool/entity/ToolEntity.kt +++ b/src/main/kotlin/de/fraunhofer/iem/app/tool/entity/ToolEntity.kt @@ -15,6 +15,8 @@ class ToolEntity( var id: UUID? = null, @Column(name = "name", length = 500, nullable = false) val name: String, @Enumerated(EnumType.STRING) val toolType: ToolType, + // Add a version field for optimistic locking + @Version @Column(name = "version", nullable = false) var version: Long? = null, ) { fun toDto(): ToolDto { diff --git a/src/main/kotlin/de/fraunhofer/iem/app/tool/repository/ToolRepository.kt b/src/main/kotlin/de/fraunhofer/iem/app/tool/repository/ToolRepository.kt index 57310a20..bace0fd3 100644 --- a/src/main/kotlin/de/fraunhofer/iem/app/tool/repository/ToolRepository.kt +++ b/src/main/kotlin/de/fraunhofer/iem/app/tool/repository/ToolRepository.kt @@ -13,5 +13,5 @@ import org.springframework.transaction.annotation.Transactional @Transactional(propagation = MANDATORY) interface ToolRepository : JpaRepository<ToolEntity, UUID> { - @Lock(LockModeType.PESSIMISTIC_READ) fun findByNameIgnoreCase(name: String?): ToolEntity? + @Lock(LockModeType.OPTIMISTIC) fun findByNameIgnoreCase(name: String?): ToolEntity? } diff --git a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/LanguageEntity.kt b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/LanguageEntity.kt index cdd3c028..7c77aa17 100644 --- a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/LanguageEntity.kt +++ b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/LanguageEntity.kt @@ -13,4 +13,6 @@ class LanguageEntity( @Column(name = "name") val name: String, @Column(name = "percentage") val percentage: Float, @ManyToOne @JoinColumn(name = "tool_run_entity_id") val toolRunEntity: ToolRunEntity, + // Add a version field for optimistic locking + @Version @Column(name = "version", nullable = false) var version: Long? = null, ) diff --git a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/ToolRunEntity.kt b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/ToolRunEntity.kt index 37578620..ad0db8af 100644 --- a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/ToolRunEntity.kt +++ b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/entity/ToolRunEntity.kt @@ -31,4 +31,6 @@ class ToolRunEntity( val languageEntities: MutableSet<LanguageEntity> = mutableSetOf(), @CurrentTimestamp(event = [EventType.INSERT]) var createdAt: Instant? = null, @UpdateTimestamp var lastUpdatedAt: Instant? = null, + // Add a version field for optimistic locking + @Version @Column(name = "version", nullable = false) var version: Long? = null, ) diff --git a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/repository/ToolRunRepository.kt b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/repository/ToolRunRepository.kt index 46e79386..276a6096 100644 --- a/src/main/kotlin/de/fraunhofer/iem/app/toolRun/repository/ToolRunRepository.kt +++ b/src/main/kotlin/de/fraunhofer/iem/app/toolRun/repository/ToolRunRepository.kt @@ -12,6 +12,6 @@ import org.springframework.transaction.annotation.Transactional @Repository @Transactional(propagation = MANDATORY) interface ToolRunRepository : JpaRepository<ToolRunEntity, UUID> { - @Lock(LockModeType.PESSIMISTIC_READ) + @Lock(LockModeType.OPTIMISTIC) fun findFirstByRepository_ProjectIdOrderByCreatedAtDesc(projectId: Long): ToolRunEntity? } -- GitLab