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 d109539eb14b293f610436b75173db39ed0cb6a5..afe103281736dcb63cf17f504b70b06af15499a3 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 bedaefde122e73befdadbc0f6cf733b062cf7062..de6f3b4a58ec99c0b5167017341492c90c2e83e7 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 c151eaf150cd869b30729f52b7d72d57b9c66876..e4a61beda758267b1395847717250ce9ab7bab69 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 426224a699102c0de3d6db21a147f6af977d485e..113c623050793d24cc74895dc4e828a93394e179 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 57310a20316c74d52e30a124ee7763bb6e910320..bace0fd37cd3bc2f6eb91ac0687f620107521b17 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 cdd3c02818e68a3ac5dc069980a3cc854a61e992..7c77aa173acb020f1f87b0122ad179e2c60ceb0d 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 37578620970b0631fe4f59bf54659694d38d0c75..ad0db8af13116af620b1f5b7c272ed13fa719bb3 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 46e793864c0a4240596a3b57a6c0ec7bed616e8f..276a60965f0ecf2891588f4b53a3fbdd83e051be 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? }