diff --git a/src/main/java/in/koreatech/koin/admin/abtest/repository/AccessHistoryRepository.java b/src/main/java/in/koreatech/koin/admin/abtest/repository/AccessHistoryRepository.java index 07defb974..4d5cfa228 100644 --- a/src/main/java/in/koreatech/koin/admin/abtest/repository/AccessHistoryRepository.java +++ b/src/main/java/in/koreatech/koin/admin/abtest/repository/AccessHistoryRepository.java @@ -3,8 +3,10 @@ import java.util.Optional; import org.springframework.data.jpa.repository.Lock; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.QueryHints; import org.springframework.data.repository.Repository; +import org.springframework.data.repository.query.Param; import in.koreatech.koin.admin.abtest.exception.AccessHistoryNotFoundException; import in.koreatech.koin.admin.abtest.model.AccessHistory; @@ -17,9 +19,13 @@ public interface AccessHistoryRepository extends Repository findById(Integer id); - Optional findByDeviceId(Integer deviceId); + @Lock(LockModeType.PESSIMISTIC_WRITE) + @QueryHints({@QueryHint(name = "jakarta.persistence.lock.timeout", value = "3000")}) + @Query("SELECT a FROM AccessHistory a JOIN FETCH a.device WHERE a.device.id = :deviceId") + Optional findByDeviceId(@Param("deviceId") Integer deviceId); default AccessHistory getById(Integer accessHistoryId) { return findById(accessHistoryId).orElseThrow(() ->