MySQL の "ON DUPLICATE KEY UPDATE" 構文は、重複キーの挿入または更新を処理する効率的な方法を提供します。ただし、この構文を Hibernate と統合するのは難しい場合があります。
HQL および SQL 実行の問題
Hibernate の HQL パーサーは、「ON DUPLICATE KEY UPDATE」構文を認識しません。さらに、Hibernate は SQL 操作を選択のみに制限します。 session.createSQLQuery("sql").executeUpdate() による SQL 更新の実行は、デフォルトではサポートされていません。
不適切な代替案: saveOrUpdate
Hibernate の saveOrUpdate メソッドを使用するとサポートされない場合があります。このシナリオでは十分です。テストは成功するかもしれませんが、同時アクセスが多いと本番環境で障害が発生する可能性があります。
解決策: @SQLInsert アノテーション
幸いなことに、Hibernate は @SQLInsert を使用したソリューションを提供しています。注釈。このアノテーションを使用すると、「ON DUPLICATE KEY UPDATE」構文を含む SQL INSERT ステートメントを指定できます。
@Entity @Table(name="story_count") @SQLInsert(sql="INSERT INTO story_count(id, view_count) VALUES (?, ?) ON DUPLICATE KEY UPDATE view_count = view_count + 1" ) public class StoryCount { // ... fields and methods omitted }
@SQLInsert アノテーションを使用すると、Hibernate の ORM 機能を維持しながら MySQL 固有の構文を利用できます。 。これにより、Hibernate を破壊することなく、効率的かつ分離されたデータベース対話を実現できます。
以上がMySQL の「ON DUPLICATE KEY UPDATE」構文で Hibernate を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。