0
我需要從尚未處理的表中返回一個項目ID(在給定時間可以有多個可用但我需要返回每個請求唯一的ID) 。Spring引導+ JPA + Hibernate + PostgreSQL pessimistic_read與JPA本機查詢
我使用JPA本機查詢
@Lock(LockModeType.PESSIMISTIC_READ) @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="5000")}) @Query(value = "SELECT id FROM item WHERE name->> 'name'=:name AND city->> 'city'=:city LIMIT 1",nativeQuery = true) public String findByStateAndStatus(@Param("name") String name, @Param("city") String city);
後,我改變了狀態,以獲取第一條記錄從DB使用更新查詢
- 返回的ID
上面的場景會引發一個異常,說明「鎖使用無效」(因爲它不支持本機查詢並且只支持ts crud操作)。
在競爭條件期間,需要使用PESSIMISTIC_READ使用SELECT for UPDATE和SKIP鎖定行的本機查詢的幫助。