如何在 Hibernate Criteria 查詢中指定特定列?

Linda Hamilton
發布: 2024-11-02 11:08:30
原創
871 人瀏覽過

How to Specify Specific Columns in Hibernate Criteria Queries?

在 Hibernate Criteria 查詢中指定特定欄位

在 Hibernate 中,預設的 Criteria 查詢會從目標表中擷取所有欄位。然而,出於效能或安全原因,通常希望排除某些列。以下是實現此目的的方法:

使用投影

投影可讓您指定要擷取的特定欄位。這可以透過使用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>
登入後複製

查詢範例

查詢範例
<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>
登入後複製

考慮貼文中更新的查詢來擷取特定欄位:

<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 Criteria 查詢,您可以使用以下程式碼:

以上是如何在 Hibernate Criteria 查詢中指定特定列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!