Hibernate 条件クエリで特定の列を指定するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-02 11:08:30
オリジナル
871 人が閲覧しました

How to Specify Specific Columns in Hibernate Criteria Queries?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!