Bagaimanakah saya boleh mengoptimumkan Pertanyaan Kriteria Hibernate untuk mengelakkan mendapatkan semula data binari yang besar dan meningkatkan prestasi?

Barbara Streisand
Lepaskan: 2024-10-25 21:50:02
asal
509 orang telah melayarinya

How can I optimize Hibernate Criteria Queries to avoid retrieving large binary data and improve performance?

Mendapatkan Lajur Tertentu menggunakan Pertanyaan Kriteria Hibernate

Cabaran:

Dalam Pertanyaan Kriteria Hibernate , adalah perkara biasa bagi pembangun menghadapi isu prestasi apabila memilih semua lajur daripada jadual, terutamanya apabila data perduaan besar terlibat. Matlamatnya adalah untuk mengecualikan lajur tertentu daripada pertanyaan untuk meningkatkan prestasi.

Penyelesaian: Pertanyaan Unjuran

Untuk mengatasi cabaran ini, Hibernate menyediakan unjuran, yang membolehkan anda menentukan lajur yang anda ingin dapatkan semula. Menggunakan unjuran, anda boleh mengecualikan lajur bermasalah daripada pertanyaan, menghasilkan pertanyaan yang lebih cekap.

Contoh:

Pertimbangkan pertanyaan SQL berikut yang mendapatkan semula semua lajur daripada jadual "pengguna":

<code class="sql">SELECT user.id, user.name FROM user;</code>
Salin selepas log masuk

Untuk menukar pertanyaan ini kepada Pertanyaan Kriteria Hibernate menggunakan unjuran, kita boleh menggunakan kod berikut:

<code class="java">Criteria cr = session.createCriteria(User.class)
    .setProjection(Projections.projectionList()
      .add(Projections.property("id"), "id")
      .add(Projections.property("Name"), "Name"))
    .setResultTransformer(Transformers.aliasToBean(User.class));

List<User> list = cr.list();</code>
Salin selepas log masuk

Dalam kod ini, kami membuat unjuran dan menambah lajur yang dikehendaki padanya. Kami kemudian menetapkan unjuran kepada objek Kriteria, memastikan bahawa hanya lajur yang ditentukan dikembalikan dalam set hasil.

Mengendalikan Ralat Klausa:

Dalam pertanyaan anda yang dikemas kini , anda mengalami ralat dalam klausa "di mana" semasa menggunakan unjuran. Untuk menyelesaikan masalah ini, anda perlu menggunakan nilai parameter untuk parameter pertanyaan. Contohnya:

<code class="java">Criteria cr = session.createCriteria(User.class)
    .setProjection(Projections.projectionList()
      .add(Projections.property("id"), "id")
      .add(Projections.property("Name"), "Name"))
    .add(Restrictions.eq("STATUS_CODE", 1))
    .add(Restrictions.eq("PRACTICE_ID", 1))
    .add(Restrictions.in("USER_ID", Arrays.asList(1, 2)))
    .setResultTransformer(Transformers.aliasToBean(User.class));</code>
Salin selepas log masuk

Dengan menggunakan nilai parameter, Hibernate akan menjana pertanyaan SQL yang betul tanpa menghadapi ralat dalam klausa "di mana".

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengoptimumkan Pertanyaan Kriteria Hibernate untuk mengelakkan mendapatkan semula data binari yang besar dan meningkatkan prestasi?. 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!