ホームページ  >  記事  >  データベース  >  Hibernate 条件クエリで特定の列を指定するにはどうすればよいですか?

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 11:08:30872ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。