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

Hibernateでテーブルをロックする

    悲観的なロックを使用する必要があります。これは

    によって実現できます。
    setLockMode(String alias, LockMode lockMode) 
    

    クエリでLockMode.UPGRADEを使用します 。

    Query.setLockMode

    ただし、このテーブルで多くのアクセスを行っている場合、これによりスケーラビリティとパフォーマンスが確実に失われます。シーケンスを使用するか、別の戦略を使用して、一度に100個の番号を取得し、データベースを更新して配布する番号を割り当てるサービス(SSBなど)を作成することをお勧めします。これにより、198のデータベースアクセスが節約されます。

    更新:

    また、テーブルのデザインを少し変更する必要があります。既知のIDを持つ単一の行を用意し、インクリメントする番号を別の列に格納することをお勧めします。次に、古い行を削除して新しい行を追加するのではなく、行を更新する必要があります。そうしないと、行ロック戦略が機能しません。

    UPDATE2:

    OPは、以下が機能することを発見しました:

    session.get(class.Class, id, lockOption)
    



    1. djangoをインストールせずにdjangoプロジェクトを実行する

    2. あまりにも多くのフィールドを返すMySQLSELECTをターミナルで最適に表示するにはどうすればよいですか?

    3. 特定のtable.columnを参照し、それらの外部キーの値を持つ外部キーを持つすべてのテーブルを見つけるにはどうすればよいですか?

    4. MicrosoftSQLを他のデータベースに複製する