在 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中文網其他相關文章!