Bagaimana untuk Menentukan Lajur Khusus dalam Pertanyaan Kriteria Hibernate?

Linda Hamilton
Lepaskan: 2024-11-02 11:08:30
asal
871 orang telah melayarinya

How to Specify Specific Columns in Hibernate Criteria Queries?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!