ホームページ >データベース >mysql チュートリアル >Hibernate Criteria クエリを最適化して、大きなバイナリ データの取得を回避し、パフォーマンスを向上させるにはどうすればよいですか?
Hibernate 基準クエリを使用した特定の列の取得
課題:
Hibernate 基準クエリ内開発者にとって、テーブルからすべての列を選択するとき、特に大規模なバイナリ データが含まれる場合にパフォーマンスの問題が発生するのはよくあることです。目標は、パフォーマンスを向上させるためにクエリから特定の列を除外することです。
解決策: プロジェクション クエリ
この課題を克服するために、Hibernate はプロジェクションを提供します。取得したい列。プロジェクションを使用すると、問題のある列をクエリから除外でき、より効率的なクエリが得られます。
例:
を取得する次の SQL クエリを考えてみましょう。 "user" テーブルのすべての列:
<code class="sql">SELECT user.id, user.name FROM user;</code>
プロジェクションを使用してこのクエリを Hibernate Criteria クエリに変換するには、次のコードを使用できます:
<code class="java">Criteria cr = session.createCriteria(User.class) .setProjection(Projections.projectionList() .add(Projections.property("id"), "id") .add(Projections.property("Name"), "Name")) .setResultTransformer(Transformers.aliasToBean(User.class)); List<User> list = cr.list();</code>
このコードでは、プロジェクションを作成し、それに必要な列を追加します。次に、射影を Criteria オブジェクトに設定し、指定された列のみが結果セットで返されるようにします。
Where 句エラーの処理:
更新されたクエリ内、射影を使用するときに「where」句でエラーが発生しました。これを解決するには、クエリ パラメーターにパラメーター化された値を使用する必要があります。例:
<code class="java">Criteria cr = session.createCriteria(User.class) .setProjection(Projections.projectionList() .add(Projections.property("id"), "id") .add(Projections.property("Name"), "Name")) .add(Restrictions.eq("STATUS_CODE", 1)) .add(Restrictions.eq("PRACTICE_ID", 1)) .add(Restrictions.in("USER_ID", Arrays.asList(1, 2))) .setResultTransformer(Transformers.aliasToBean(User.class));</code>
パラメーター化された値を使用すると、Hibernate は「where」句でエラーが発生することなく正しい SQL クエリを生成します。
以上がHibernate Criteria クエリを最適化して、大きなバイナリ データの取得を回避し、パフォーマンスを向上させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。