Rumah > Artikel > pangkalan data > Bagaimana untuk Menentukan Lajur Khusus dalam Pertanyaan Kriteria Hibernate?
Menentukan Lajur Khusus dalam Pertanyaan Kriteria Hibernate
Dalam Hibernate, Pertanyaan Kriteria lalai mendapatkan semula semua lajur daripada jadual sasaran. Walau bagaimanapun, selalunya wajar untuk mengecualikan lajur tertentu atas sebab prestasi atau keselamatan. Begini cara untuk mencapainya:
Menggunakan Unjuran
Unjuran membolehkan anda menentukan lajur khusus yang ingin anda dapatkan semula. Ini boleh dicapai dengan menggunakan kaedah Projections.projectionList() dan menambah sifat yang diingini:
<code class="java">Criteria cr = session.createCriteria(User.class) .setProjection(Projections.projectionList() .add(Projections.property("id"), "id") .add(Projections.property("Name"), "Name"));</code>
Mengendalikan Konflik Alias
Apabila menggunakan unjuran, adalah perlu untuk mengendalikan konflik alias kerana Hibernate menjana alias untuk lajur yang dikembalikan. Untuk menyelesaikan masalah ini, anda boleh menggunakan kaedah setResultTransformer() dengan Transformers.aliasToBean() untuk mengubah hasil menjadi objek yang dijangkakan:
<code class="java">cr.setResultTransformer(Transformers.aliasToBean(User.class));</code>
Contoh Pertanyaan
Pertimbangkan pertanyaan yang dikemas kini dalam siaran anda untuk mendapatkan semula lajur tertentu:
<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>
Untuk menterjemahkannya ke dalam Pertanyaan Kriteria Hibernate, anda boleh menggunakan kod berikut:
<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>
Atas ialah kandungan terperinci Bagaimana untuk Menentukan Lajur Khusus dalam Pertanyaan Kriteria Hibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!