sql >> データベース >  >> RDS >> Oracle

JPAレベルからロックされた更新スキップを選択します

    HibernateはUPGRADE_SKIPLOCKEDロックモードを提供します。

    JPAとHibernateを使用して、休止状態のLockMode ドキュメントでは、 PESSIMISTIC_WRITEを組み合わせる必要があります JPA LockModeType

    entityManager.find(Department.class, 1, LockModeType.PESSIMISTIC_WRITE);
    

    永続性ユニットのpersistence.xmlのように、ロックタイムアウト設定:

    <properties>
       <property name="javax.persistence.query.timeout" value="-2"/>
    </properties>
    

    (このLockModeは複雑なクエリにも設定できることに注意してください)

    SKIPLOCKEDはANSISQLの一部ではありません。次のような一部のRDBMSは、これを特定の機能として提供します。

    したがって、純粋なJPAでは、クエリで「SKIPLOCKED」を指定することはできません。実際、 LockModeType 、JPA2.1は以下のみをサポートします。

    • なし
    • 楽観的
    • OPTIMISTIC_FORCE_INCREMENT
    • PESSIMISTIC_FORCE_INCREMENT
    • PESSIMISTIC_READ
    • PESSIMISTIC_WRITE
    • 読む
    • 書き込み

    ただし、クエリでSKIP LOCKEDを有効にするには、次の方法を使用できます。

    • 休止状態のLockMode PESSIMISTIC_WRITE の組み合わせのおかげで、JPAクエリを介してSKIPLOCKEDを指定できます。 上記のLockModeTypeロックタイムアウト固有の設定
    • 作成したようにネイティブSQLクエリを作成します


    1. PDO lastInsertIdはトランザクションで機能しませんか?

    2. JOIN内でDISTINCTを使用すると、問題が発生します

    3. SQL Server T-SQL関数の使用方法SUM:5つのユースケース

    4. MariaDBでのINSERT()関数のしくみ