Hibernate では、Criteria Query API により SQL のようなクエリを構築する柔軟な方法が提供されます。デフォルトでは、生成されたクエリはすべての列を取得するため、特定の列が除外されるとパフォーマンスの問題が発生する可能性があります。
条件クエリから特定の列を除外するには、射影を使用します。 。プロジェクションを使用すると、結果に含める列を指定できます。
<code class="java">CriteriaBuilder cb = session.getCriteriaBuilder(); CriteriaQuery<Object[]> criteriaQuery = cb.createQuery(Object[].class); Root<Entity> root = criteriaQuery.from(Entity.class); criteriaQuery.multiselect(root.get("id"), root.get("name"), root.get("description")); List<Object[]> result = session.createQuery(criteriaQuery).list();</code>
このクエリは、id、name、description 列のみを取得し、結果から他の列を省略します。
プロジェクションを使用する場合、結果のエイリアスはプロジェクション リストで指定されたプロパティと一致する必要があります。そうしないと、「'where 句' に不明な列 'エイリアス' があります」のようなエラーが発生する可能性があります。
<code class="java">CriteriaBuilder cb = session.getCriteriaBuilder(); CriteriaQuery<Object[]> criteriaQuery = cb.createQuery(Object[].class); Root<Entity> root = criteriaQuery.from(Entity.class); criteriaQuery.multiselect(root.get("id").as("y0"), root.get("name").as("y1"), root.get("description").as("y2")); List<Object[]> result = session.createQuery(criteriaQuery).list();</code>
このクエリでは、エイリアス ("y0"、"y1"、"y2") が一致します。射影リスト内のプロパティの順序。
射影を使用した基準クエリの HQL 同等物は次のとおりです。
<code class="hql">SELECT e.id, e.name, e.description FROM Entity e</code>
以上がHibernate Criteria クエリを使用して特定の列を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。