2017-10-05 23 views
0

まだ処理されていないテーブルから1つのアイテムIDを返す必要があります(指定された時点では複数の使用が可能ですが、要求ごとに一意のIDを返す必要があります) 。Springブート+ JPA + Hibernate + PostgreSQL JPAネイティブクエリを使用したpessimistic_read

  • 私は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 operations)を実行します。

    競合状態でUPDATEおよびSKIPロック行のSELECTに対してネイティブクエリを使用してPESSIMISTIC_READを使用すると、ヘルプが必要です。

  • 答えて

    0

    以下の行をクエリに追加すると、問題が解決されます。 UPDATE SKIP FOR

    @Query(value = "SELECT id FROM item WHERE name->> 'name'=:name AND city->> 'city'=:city LIMIT 1 FOR UPDATE SKIP LOCKED",nativeQuery = true) 
    public String findByStateAndStatus(@Param("name") String name, @Param("city") String city); 
    
    をLOCKED
    関連する問題