Dalam Hibernate, API Pertanyaan Kriteria menyediakan cara yang fleksibel untuk membina pertanyaan seperti SQL. Secara lalai, pertanyaan yang dijana mendapatkan semula semua lajur, yang boleh membawa kepada isu prestasi apabila lajur tertentu dikecualikan.
Untuk mengecualikan lajur tertentu daripada Pertanyaan Kriteria, gunakan unjuran . Unjuran membolehkan anda menentukan lajur yang harus disertakan dalam hasil.
<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>
Pertanyaan ini hanya akan mendapatkan semula lajur id, nama dan penerangan, mengetepikan lajur lain daripada hasil carian.
Apabila menggunakan unjuran, alias hasil mesti sepadan dengan sifat yang dinyatakan dalam senarai unjuran. Jika tidak, anda mungkin menghadapi ralat seperti "Lajur 'alias' tidak diketahui dalam 'fasal di mana'".
<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>
Dalam pertanyaan ini, alias ("y0", "y1", "y2") sepadan dengan susunan sifat dalam senarai unjuran.
Setara HQL bagi Pertanyaan Kriteria dengan unjuran ialah:
<code class="hql">SELECT e.id, e.name, e.description FROM Entity e</code>
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Lajur Tertentu Menggunakan Pertanyaan Kriteria Hibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!