Hibernate 基準クエリでの特定の列の指定
Hibernate では、デフォルトの基準クエリはターゲット テーブルからすべての列を取得します。ただし、パフォーマンスやセキュリティ上の理由から、特定の列を除外することが望ましい場合がよくあります。これを実現する方法は次のとおりです。
プロジェクションの使用
プロジェクションを使用すると、取得する特定の列を指定できます。これは、Projections.projectionList() メソッドを使用し、目的のプロパティを追加することで実現できます。
<code class="java">Criteria cr = session.createCriteria(User.class) .setProjection(Projections.projectionList() .add(Projections.property("id"), "id") .add(Projections.property("Name"), "Name"));</code>
エイリアス競合の処理
投影を使用する場合、次のことが必要です。 Hibernate は返された列のエイリアスを生成するため、エイリアスの競合を処理します。これを解決するには、setResultTransformer() メソッドを Transformers.aliasToBean() とともに使用して、結果を期待されるオブジェクトに変換します。
<code class="java">cr.setResultTransformer(Transformers.aliasToBean(User.class));</code>
Query Example
特定の列を取得するために投稿内の更新されたクエリを検討してください:
<code class="sql">select this_.TEMPLATE_ID, this_.TEMPLATE_NAME, this_.CREATE_DATE, this_.UPDATE_DATE, this_.STATUS_CODE, this_.USER_ID from templates this_ where this_.STATUS_CODE = 1 and this_.PRACTICE_ID = 1 and this_.USER_ID in (1, 2) order by this_.TEMPLATE_NAME asc limit ?</code>
これを Hibernate Criteria クエリに変換するには、次のコードを使用できます:
<code class="java">Criteria cr = session.createCriteria(Template.class) .setProjection(Projections.projectionList() .add(Projections.property("TEMPLATE_ID"), "TEMPLATE_ID") .add(Projections.property("TEMPLATE_NAME"), "TEMPLATE_NAME") .add(Projections.property("CREATE_DATE"), "CREATE_DATE") .add(Projections.property("UPDATE_DATE"), "UPDATE_DATE") .add(Projections.property("STATUS_CODE"), "STATUS_CODE") .add(Projections.property("USER_ID"), "USER_ID")) .add(Restrictions.eq("this_.STATUS_CODE", 1)) .add(Restrictions.eq("this_.PRACTICE_ID", 1)) .add(Restrictions.in("this_.USER_ID", Arrays.asList(1, 2))) .addOrder(Order.asc("this_.TEMPLATE_NAME")) .setResultTransformer(Transformers.aliasToBean(Template.class));</code>
以上がHibernate 条件クエリで特定の列を指定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。